This is the project for the Old Model Robots for OU's Dr. Davis's Configurable Robots Research. This is being published so future robots can be set up easily.

Dependencies:   FatFileSystem MCP3008 Motor PinDetect QTR_8A SRF05 SSD1308_128x64_I2C mbed

Committer:
DrewSchaef
Date:
Wed Nov 01 15:57:59 2017 +0000
Revision:
0:bcad524c1856
Published the project to allow access for future work on the Configurable Robots Research Project(s).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DrewSchaef 0:bcad524c1856 1 /*
DrewSchaef 0:bcad524c1856 2 Copyright (c) 2010 Peter Barrett
DrewSchaef 0:bcad524c1856 3
DrewSchaef 0:bcad524c1856 4 Permission is hereby granted, free of charge, to any person obtaining a copy
DrewSchaef 0:bcad524c1856 5 of this software and associated documentation files (the "Software"), to deal
DrewSchaef 0:bcad524c1856 6 in the Software without restriction, including without limitation the rights
DrewSchaef 0:bcad524c1856 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
DrewSchaef 0:bcad524c1856 8 copies of the Software, and to permit persons to whom the Software is
DrewSchaef 0:bcad524c1856 9 furnished to do so, subject to the following conditions:
DrewSchaef 0:bcad524c1856 10
DrewSchaef 0:bcad524c1856 11 The above copyright notice and this permission notice shall be included in
DrewSchaef 0:bcad524c1856 12 all copies or substantial portions of the Software.
DrewSchaef 0:bcad524c1856 13
DrewSchaef 0:bcad524c1856 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
DrewSchaef 0:bcad524c1856 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
DrewSchaef 0:bcad524c1856 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
DrewSchaef 0:bcad524c1856 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
DrewSchaef 0:bcad524c1856 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
DrewSchaef 0:bcad524c1856 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
DrewSchaef 0:bcad524c1856 20 THE SOFTWARE.
DrewSchaef 0:bcad524c1856 21 */
DrewSchaef 0:bcad524c1856 22
DrewSchaef 0:bcad524c1856 23 #include "mbed.h"
DrewSchaef 0:bcad524c1856 24 #include "USBHost.h"
DrewSchaef 0:bcad524c1856 25 #include "Utils.h"
DrewSchaef 0:bcad524c1856 26
DrewSchaef 0:bcad524c1856 27 #include <stdio.h>
DrewSchaef 0:bcad524c1856 28 #include <stdlib.h>
DrewSchaef 0:bcad524c1856 29 #include <stdio.h>
DrewSchaef 0:bcad524c1856 30 #include <string.h>
DrewSchaef 0:bcad524c1856 31
DrewSchaef 0:bcad524c1856 32 #include "Utils.h"
DrewSchaef 0:bcad524c1856 33 #include "USBHost.h"
DrewSchaef 0:bcad524c1856 34 #include "hci.h"
DrewSchaef 0:bcad524c1856 35
DrewSchaef 0:bcad524c1856 36 extern void wii_data(char *data);
DrewSchaef 0:bcad524c1856 37
DrewSchaef 0:bcad524c1856 38 extern void connected();
DrewSchaef 0:bcad524c1856 39
DrewSchaef 0:bcad524c1856 40 extern void connect();
DrewSchaef 0:bcad524c1856 41
DrewSchaef 0:bcad524c1856 42 extern void connecting();
DrewSchaef 0:bcad524c1856 43
DrewSchaef 0:bcad524c1856 44 void printf(const BD_ADDR* addr)
DrewSchaef 0:bcad524c1856 45 {
DrewSchaef 0:bcad524c1856 46 const u8* a = addr->addr;
DrewSchaef 0:bcad524c1856 47 printf("%02X:%02X:%02X:%02X:%02X:%02X",a[5],a[4],a[3],a[2],a[1],a[0]);
DrewSchaef 0:bcad524c1856 48 }
DrewSchaef 0:bcad524c1856 49
DrewSchaef 0:bcad524c1856 50 #define MAX_HCL_SIZE 260
DrewSchaef 0:bcad524c1856 51 #define MAX_ACL_SIZE 400
DrewSchaef 0:bcad524c1856 52
DrewSchaef 0:bcad524c1856 53 class HCITransportUSB : public HCITransport
DrewSchaef 0:bcad524c1856 54 {
DrewSchaef 0:bcad524c1856 55 int _device;
DrewSchaef 0:bcad524c1856 56 u8* _hciBuffer;
DrewSchaef 0:bcad524c1856 57 u8* _aclBuffer;
DrewSchaef 0:bcad524c1856 58
DrewSchaef 0:bcad524c1856 59 public:
DrewSchaef 0:bcad524c1856 60 void Open(int device, u8* hciBuffer, u8* aclBuffer) {
DrewSchaef 0:bcad524c1856 61 _device = device;
DrewSchaef 0:bcad524c1856 62 _hciBuffer = hciBuffer;
DrewSchaef 0:bcad524c1856 63 _aclBuffer = aclBuffer;
DrewSchaef 0:bcad524c1856 64 USBInterruptTransfer(_device,0x81,_hciBuffer,MAX_HCL_SIZE,HciCallback,this);
DrewSchaef 0:bcad524c1856 65 USBBulkTransfer(_device,0x82,_aclBuffer,MAX_ACL_SIZE,AclCallback,this);
DrewSchaef 0:bcad524c1856 66 }
DrewSchaef 0:bcad524c1856 67
DrewSchaef 0:bcad524c1856 68 static void HciCallback(int device, int endpoint, int status, u8* data, int len, void* userData) {
DrewSchaef 0:bcad524c1856 69 HCI* t = ((HCITransportUSB*)userData)->_target;
DrewSchaef 0:bcad524c1856 70 if (t)
DrewSchaef 0:bcad524c1856 71 t->HCIRecv(data,len);
DrewSchaef 0:bcad524c1856 72 USBInterruptTransfer(device,0x81,data,MAX_HCL_SIZE,HciCallback,userData);
DrewSchaef 0:bcad524c1856 73 }
DrewSchaef 0:bcad524c1856 74
DrewSchaef 0:bcad524c1856 75 static void AclCallback(int device, int endpoint, int status, u8* data, int len, void* userData) {
DrewSchaef 0:bcad524c1856 76 HCI* t = ((HCITransportUSB*)userData)->_target;
DrewSchaef 0:bcad524c1856 77 if (t)
DrewSchaef 0:bcad524c1856 78 t->ACLRecv(data,len);
DrewSchaef 0:bcad524c1856 79 USBBulkTransfer(device,0x82,data,MAX_ACL_SIZE,AclCallback,userData);
DrewSchaef 0:bcad524c1856 80 }
DrewSchaef 0:bcad524c1856 81
DrewSchaef 0:bcad524c1856 82 virtual void HCISend(const u8* data, int len) {
DrewSchaef 0:bcad524c1856 83 USBControlTransfer(_device,REQUEST_TYPE_CLASS, 0, 0, 0,(u8*)data,len);
DrewSchaef 0:bcad524c1856 84 }
DrewSchaef 0:bcad524c1856 85
DrewSchaef 0:bcad524c1856 86 virtual void ACLSend(const u8* data, int len) {
DrewSchaef 0:bcad524c1856 87 USBBulkTransfer(_device,0x02,(u8*)data,len);
DrewSchaef 0:bcad524c1856 88 }
DrewSchaef 0:bcad524c1856 89 };
DrewSchaef 0:bcad524c1856 90
DrewSchaef 0:bcad524c1856 91
DrewSchaef 0:bcad524c1856 92 #define WII_REMOTE 0x042500
DrewSchaef 0:bcad524c1856 93
DrewSchaef 0:bcad524c1856 94 class HIDBluetooth
DrewSchaef 0:bcad524c1856 95 {
DrewSchaef 0:bcad524c1856 96 int _control; // Sockets for control (out) and interrupt (in)
DrewSchaef 0:bcad524c1856 97 int _interrupt;
DrewSchaef 0:bcad524c1856 98 int _devClass;
DrewSchaef 0:bcad524c1856 99 BD_ADDR _addr;
DrewSchaef 0:bcad524c1856 100 u8 _pad[2]; // Struct align
DrewSchaef 0:bcad524c1856 101
DrewSchaef 0:bcad524c1856 102 public:
DrewSchaef 0:bcad524c1856 103 HIDBluetooth() : _control(0),_interrupt(0),_devClass(0) {};
DrewSchaef 0:bcad524c1856 104
DrewSchaef 0:bcad524c1856 105 bool InUse() {
DrewSchaef 0:bcad524c1856 106 return _control != 0;
DrewSchaef 0:bcad524c1856 107 }
DrewSchaef 0:bcad524c1856 108
DrewSchaef 0:bcad524c1856 109 static void OnHidInterrupt(int socket, SocketState state, const u8* data, int len, void* userData) {
DrewSchaef 0:bcad524c1856 110 HIDBluetooth* t = (HIDBluetooth*)userData;
DrewSchaef 0:bcad524c1856 111 if (data) {
DrewSchaef 0:bcad524c1856 112 if (t->_devClass == WII_REMOTE && data[1] == 0x30) {
DrewSchaef 0:bcad524c1856 113 //printf("================wii====================\n");
DrewSchaef 0:bcad524c1856 114 t->Led();
DrewSchaef 0:bcad524c1856 115 t->Hid(); // ask for accelerometer
DrewSchaef 0:bcad524c1856 116 t->_devClass = 0;
DrewSchaef 0:bcad524c1856 117 }
DrewSchaef 0:bcad524c1856 118
DrewSchaef 0:bcad524c1856 119 const u8* d = data;
DrewSchaef 0:bcad524c1856 120 switch (d[1]) {
DrewSchaef 0:bcad524c1856 121
DrewSchaef 0:bcad524c1856 122 case 0x02: {
DrewSchaef 0:bcad524c1856 123 int x = (signed char)d[3];
DrewSchaef 0:bcad524c1856 124 int y = (signed char)d[4];
DrewSchaef 0:bcad524c1856 125 printf("Mouse %2X dx:%d dy:%d\n",d[2],x,y);
DrewSchaef 0:bcad524c1856 126 }
DrewSchaef 0:bcad524c1856 127 break;
DrewSchaef 0:bcad524c1856 128
DrewSchaef 0:bcad524c1856 129 case 0x37: {
DrewSchaef 0:bcad524c1856 130 wii_data((char*)&d[2]);
DrewSchaef 0:bcad524c1856 131 /*
DrewSchaef 0:bcad524c1856 132 char *dd = (char*)&d[2];
DrewSchaef 0:bcad524c1856 133
DrewSchaef 0:bcad524c1856 134 Wiimote wii;
DrewSchaef 0:bcad524c1856 135 wii.decode(dd);
DrewSchaef 0:bcad524c1856 136 wii.dump();
DrewSchaef 0:bcad524c1856 137
DrewSchaef 0:bcad524c1856 138 float dir = 0;
DrewSchaef 0:bcad524c1856 139 if(wii.one) {
DrewSchaef 0:bcad524c1856 140 dir = -1;
DrewSchaef 0:bcad524c1856 141 }
DrewSchaef 0:bcad524c1856 142 if(wii.two) {
DrewSchaef 0:bcad524c1856 143 dir = 1;
DrewSchaef 0:bcad524c1856 144 }
DrewSchaef 0:bcad524c1856 145
DrewSchaef 0:bcad524c1856 146 if (dir != 0) {
DrewSchaef 0:bcad524c1856 147 float f = wii.wheel / 200.0f;
DrewSchaef 0:bcad524c1856 148
DrewSchaef 0:bcad524c1856 149 if(f < 0) {
DrewSchaef 0:bcad524c1856 150 m3pi.left_motor(dir * (0.6 + abs(f)));
DrewSchaef 0:bcad524c1856 151 m3pi.right_motor(dir * (0.6 - (abs(f) / 2)));
DrewSchaef 0:bcad524c1856 152 } else {
DrewSchaef 0:bcad524c1856 153 m3pi.right_motor(dir * (0.6 + abs(f)));
DrewSchaef 0:bcad524c1856 154 m3pi.left_motor(dir * (0.6 - (abs(f) / 2)));
DrewSchaef 0:bcad524c1856 155 }
DrewSchaef 0:bcad524c1856 156 } else {
DrewSchaef 0:bcad524c1856 157 m3pi.left_motor(0);
DrewSchaef 0:bcad524c1856 158 m3pi.right_motor(0);
DrewSchaef 0:bcad524c1856 159 }
DrewSchaef 0:bcad524c1856 160
DrewSchaef 0:bcad524c1856 161 */
DrewSchaef 0:bcad524c1856 162 }
DrewSchaef 0:bcad524c1856 163 }
DrewSchaef 0:bcad524c1856 164 }
DrewSchaef 0:bcad524c1856 165 }
DrewSchaef 0:bcad524c1856 166
DrewSchaef 0:bcad524c1856 167 static void OnHidControl(int socket, SocketState state, const u8* data, int len, void* userData) {
DrewSchaef 0:bcad524c1856 168 printf("OnHidControl\n");
DrewSchaef 0:bcad524c1856 169 if (data) {
DrewSchaef 0:bcad524c1856 170 printHex(data,len);
DrewSchaef 0:bcad524c1856 171 connected();
DrewSchaef 0:bcad524c1856 172 }
DrewSchaef 0:bcad524c1856 173
DrewSchaef 0:bcad524c1856 174
DrewSchaef 0:bcad524c1856 175 }
DrewSchaef 0:bcad524c1856 176
DrewSchaef 0:bcad524c1856 177 void Open(BD_ADDR* bdAddr, inquiry_info* info) {
DrewSchaef 0:bcad524c1856 178 printf("L2CAPAddr size %d\n",sizeof(L2CAPAddr));
DrewSchaef 0:bcad524c1856 179 _addr = *bdAddr;
DrewSchaef 0:bcad524c1856 180 L2CAPAddr sockAddr;
DrewSchaef 0:bcad524c1856 181 sockAddr.bdaddr = _addr;
DrewSchaef 0:bcad524c1856 182 sockAddr.psm = L2CAP_PSM_HID_INTR;
DrewSchaef 0:bcad524c1856 183 printf("Socket_Open size %d\n",sizeof(L2CAPAddr));
DrewSchaef 0:bcad524c1856 184 _interrupt = Socket_Open(SOCKET_L2CAP,&sockAddr.hdr,OnHidInterrupt,this);
DrewSchaef 0:bcad524c1856 185 sockAddr.psm = L2CAP_PSM_HID_CNTL;
DrewSchaef 0:bcad524c1856 186 _control = Socket_Open(SOCKET_L2CAP,&sockAddr.hdr,OnHidControl,this);
DrewSchaef 0:bcad524c1856 187
DrewSchaef 0:bcad524c1856 188 printfBytes("OPEN DEVICE CLASS",info->dev_class,3);
DrewSchaef 0:bcad524c1856 189 _devClass = (info->dev_class[0] << 16) | (info->dev_class[1] << 8) | info->dev_class[2];
DrewSchaef 0:bcad524c1856 190 }
DrewSchaef 0:bcad524c1856 191
DrewSchaef 0:bcad524c1856 192 void Close() {
DrewSchaef 0:bcad524c1856 193 if (_control)
DrewSchaef 0:bcad524c1856 194 Socket_Close(_control);
DrewSchaef 0:bcad524c1856 195 if (_interrupt)
DrewSchaef 0:bcad524c1856 196 Socket_Close(_interrupt);
DrewSchaef 0:bcad524c1856 197 _control = _interrupt = 0;
DrewSchaef 0:bcad524c1856 198 }
DrewSchaef 0:bcad524c1856 199
DrewSchaef 0:bcad524c1856 200 void Led(int id = 0x10) {
DrewSchaef 0:bcad524c1856 201 u8 led[3] = {0x52, 0x11, id};
DrewSchaef 0:bcad524c1856 202 if (_control)
DrewSchaef 0:bcad524c1856 203 Socket_Send(_control,led,3);
DrewSchaef 0:bcad524c1856 204 }
DrewSchaef 0:bcad524c1856 205
DrewSchaef 0:bcad524c1856 206 void Hid(int report = 0x37) {
DrewSchaef 0:bcad524c1856 207 u8 hid[4] = { 0x52, 0x12, 0x00, report };
DrewSchaef 0:bcad524c1856 208 if (_control != -1)
DrewSchaef 0:bcad524c1856 209 Socket_Send(_control,hid,4);
DrewSchaef 0:bcad524c1856 210 }
DrewSchaef 0:bcad524c1856 211 };
DrewSchaef 0:bcad524c1856 212
DrewSchaef 0:bcad524c1856 213
DrewSchaef 0:bcad524c1856 214 HCI* gHCI = 0;
DrewSchaef 0:bcad524c1856 215
DrewSchaef 0:bcad524c1856 216 #define MAX_HID_DEVICES 8
DrewSchaef 0:bcad524c1856 217
DrewSchaef 0:bcad524c1856 218 class ShellApp
DrewSchaef 0:bcad524c1856 219 {
DrewSchaef 0:bcad524c1856 220 char _line[64];
DrewSchaef 0:bcad524c1856 221 HIDBluetooth _hids[MAX_HID_DEVICES];
DrewSchaef 0:bcad524c1856 222
DrewSchaef 0:bcad524c1856 223 public:
DrewSchaef 0:bcad524c1856 224 void Ready() {
DrewSchaef 0:bcad524c1856 225 printf("HIDBluetooth %d\n",sizeof(HIDBluetooth));
DrewSchaef 0:bcad524c1856 226 memset(_hids,0,sizeof(_hids));
DrewSchaef 0:bcad524c1856 227 Inquiry();
DrewSchaef 0:bcad524c1856 228
DrewSchaef 0:bcad524c1856 229 }
DrewSchaef 0:bcad524c1856 230
DrewSchaef 0:bcad524c1856 231 // We have connected to a device
DrewSchaef 0:bcad524c1856 232 void ConnectionComplete(HCI* hci, connection_info* info) {
DrewSchaef 0:bcad524c1856 233 printf("ConnectionComplete ");
DrewSchaef 0:bcad524c1856 234 BD_ADDR* a = &info->bdaddr;
DrewSchaef 0:bcad524c1856 235 //printf(a);
DrewSchaef 0:bcad524c1856 236 BTDevice* bt = hci->Find(a);
DrewSchaef 0:bcad524c1856 237 HIDBluetooth* hid = NewHIDBluetooth();
DrewSchaef 0:bcad524c1856 238 printf("%08x %08x\n",bt,hid);
DrewSchaef 0:bcad524c1856 239 if (hid)
DrewSchaef 0:bcad524c1856 240 hid->Open(a,&bt->_info);
DrewSchaef 0:bcad524c1856 241 }
DrewSchaef 0:bcad524c1856 242
DrewSchaef 0:bcad524c1856 243 HIDBluetooth* NewHIDBluetooth() {
DrewSchaef 0:bcad524c1856 244 for (int i = 0; i < MAX_HID_DEVICES; i++)
DrewSchaef 0:bcad524c1856 245 if (!_hids[i].InUse())
DrewSchaef 0:bcad524c1856 246 return _hids+i;
DrewSchaef 0:bcad524c1856 247 return 0;
DrewSchaef 0:bcad524c1856 248 }
DrewSchaef 0:bcad524c1856 249
DrewSchaef 0:bcad524c1856 250 void ConnectDevices() {
DrewSchaef 0:bcad524c1856 251 BTDevice* devs[8];
DrewSchaef 0:bcad524c1856 252 int count = gHCI->GetDevices(devs,8);
DrewSchaef 0:bcad524c1856 253 for (int i = 0; i < count; i++) {
DrewSchaef 0:bcad524c1856 254 printfBytes("DEVICE CLASS",devs[i]->_info.dev_class,3);
DrewSchaef 0:bcad524c1856 255 if (devs[i]->_handle == 0) {
DrewSchaef 0:bcad524c1856 256 BD_ADDR* bd = &devs[i]->_info.bdaddr;
DrewSchaef 0:bcad524c1856 257 printf("Connecting to ");
DrewSchaef 0:bcad524c1856 258 //printf(bd);
DrewSchaef 0:bcad524c1856 259 printf("\n");
DrewSchaef 0:bcad524c1856 260 gHCI->CreateConnection(bd);
DrewSchaef 0:bcad524c1856 261 }
DrewSchaef 0:bcad524c1856 262 }
DrewSchaef 0:bcad524c1856 263 }
DrewSchaef 0:bcad524c1856 264 /*
DrewSchaef 0:bcad524c1856 265 const char* ReadLine() {
DrewSchaef 0:bcad524c1856 266 int i;
DrewSchaef 0:bcad524c1856 267 for (i = 0; i < 255; ) {
DrewSchaef 0:bcad524c1856 268 USBLoop();
DrewSchaef 0:bcad524c1856 269 int c = GetConsoleChar();
DrewSchaef 0:bcad524c1856 270 if (c == -1)
DrewSchaef 0:bcad524c1856 271 continue;
DrewSchaef 0:bcad524c1856 272 if (c == '\n' || c == 13)
DrewSchaef 0:bcad524c1856 273 break;
DrewSchaef 0:bcad524c1856 274 _line[i++] = c;
DrewSchaef 0:bcad524c1856 275 }
DrewSchaef 0:bcad524c1856 276 _line[i] = 0;
DrewSchaef 0:bcad524c1856 277 return _line;
DrewSchaef 0:bcad524c1856 278 }
DrewSchaef 0:bcad524c1856 279 */
DrewSchaef 0:bcad524c1856 280 void Inquiry() {
DrewSchaef 0:bcad524c1856 281 printf("Inquiry..\n");
DrewSchaef 0:bcad524c1856 282 gHCI->Inquiry();
DrewSchaef 0:bcad524c1856 283 }
DrewSchaef 0:bcad524c1856 284
DrewSchaef 0:bcad524c1856 285 void List() {
DrewSchaef 0:bcad524c1856 286 #if 0
DrewSchaef 0:bcad524c1856 287 printf("%d devices\n",_deviceCount);
DrewSchaef 0:bcad524c1856 288 for (int i = 0; i < _deviceCount; i++) {
DrewSchaef 0:bcad524c1856 289 printf(&_devices[i].info.bdaddr);
DrewSchaef 0:bcad524c1856 290 printf("\n");
DrewSchaef 0:bcad524c1856 291 }
DrewSchaef 0:bcad524c1856 292 #endif
DrewSchaef 0:bcad524c1856 293 }
DrewSchaef 0:bcad524c1856 294
DrewSchaef 0:bcad524c1856 295 void Connect() {
DrewSchaef 0:bcad524c1856 296 ConnectDevices();
DrewSchaef 0:bcad524c1856 297 }
DrewSchaef 0:bcad524c1856 298
DrewSchaef 0:bcad524c1856 299 void Disconnect() {
DrewSchaef 0:bcad524c1856 300 gHCI->DisconnectAll();
DrewSchaef 0:bcad524c1856 301 }
DrewSchaef 0:bcad524c1856 302
DrewSchaef 0:bcad524c1856 303 void CloseMouse() {
DrewSchaef 0:bcad524c1856 304 }
DrewSchaef 0:bcad524c1856 305
DrewSchaef 0:bcad524c1856 306 void Quit() {
DrewSchaef 0:bcad524c1856 307 CloseMouse();
DrewSchaef 0:bcad524c1856 308 }
DrewSchaef 0:bcad524c1856 309
DrewSchaef 0:bcad524c1856 310 };
DrewSchaef 0:bcad524c1856 311
DrewSchaef 0:bcad524c1856 312 // Instance
DrewSchaef 0:bcad524c1856 313 ShellApp gApp;
DrewSchaef 0:bcad524c1856 314
DrewSchaef 0:bcad524c1856 315 static int HciCallback(HCI* hci, HCI_CALLBACK_EVENT evt, const u8* data, int len)
DrewSchaef 0:bcad524c1856 316 {
DrewSchaef 0:bcad524c1856 317 switch (evt) {
DrewSchaef 0:bcad524c1856 318 case CALLBACK_READY:
DrewSchaef 0:bcad524c1856 319 printf("CALLBACK_READY\n");
DrewSchaef 0:bcad524c1856 320 connect();
DrewSchaef 0:bcad524c1856 321 gApp.Ready();
DrewSchaef 0:bcad524c1856 322 break;
DrewSchaef 0:bcad524c1856 323
DrewSchaef 0:bcad524c1856 324 case CALLBACK_INQUIRY_RESULT:
DrewSchaef 0:bcad524c1856 325 printf("CALLBACK_INQUIRY_RESULT ");
DrewSchaef 0:bcad524c1856 326 //printf((BD_ADDR*)data);
DrewSchaef 0:bcad524c1856 327 connecting();
DrewSchaef 0:bcad524c1856 328 printf("\n");
DrewSchaef 0:bcad524c1856 329 break;
DrewSchaef 0:bcad524c1856 330
DrewSchaef 0:bcad524c1856 331 case CALLBACK_INQUIRY_DONE:
DrewSchaef 0:bcad524c1856 332 printf("CALLBACK_INQUIRY_DONE\n");
DrewSchaef 0:bcad524c1856 333 gApp.ConnectDevices();
DrewSchaef 0:bcad524c1856 334 break;
DrewSchaef 0:bcad524c1856 335
DrewSchaef 0:bcad524c1856 336 case CALLBACK_REMOTE_NAME: {
DrewSchaef 0:bcad524c1856 337 BD_ADDR* addr = (BD_ADDR*)data;
DrewSchaef 0:bcad524c1856 338 const char* name = (const char*)(data + 6);
DrewSchaef 0:bcad524c1856 339 //printf(addr);
DrewSchaef 0:bcad524c1856 340 printf(" % s\n",name);
DrewSchaef 0:bcad524c1856 341 }
DrewSchaef 0:bcad524c1856 342 break;
DrewSchaef 0:bcad524c1856 343
DrewSchaef 0:bcad524c1856 344 case CALLBACK_CONNECTION_COMPLETE:
DrewSchaef 0:bcad524c1856 345 gApp.ConnectionComplete(hci,(connection_info*)data);
DrewSchaef 0:bcad524c1856 346 break;
DrewSchaef 0:bcad524c1856 347 };
DrewSchaef 0:bcad524c1856 348 return 0;
DrewSchaef 0:bcad524c1856 349 }
DrewSchaef 0:bcad524c1856 350
DrewSchaef 0:bcad524c1856 351 // these should be placed in the DMA SRAM
DrewSchaef 0:bcad524c1856 352 typedef struct {
DrewSchaef 0:bcad524c1856 353 u8 _hciBuffer[MAX_HCL_SIZE];
DrewSchaef 0:bcad524c1856 354 u8 _aclBuffer[MAX_ACL_SIZE];
DrewSchaef 0:bcad524c1856 355 } SRAMPlacement;
DrewSchaef 0:bcad524c1856 356
DrewSchaef 0:bcad524c1856 357 HCITransportUSB _HCITransportUSB;
DrewSchaef 0:bcad524c1856 358 HCI _HCI;
DrewSchaef 0:bcad524c1856 359
DrewSchaef 0:bcad524c1856 360 u8* USBGetBuffer(u32* len);
DrewSchaef 0:bcad524c1856 361 int OnBluetoothInsert(int device)
DrewSchaef 0:bcad524c1856 362 {
DrewSchaef 0:bcad524c1856 363 printf("Bluetooth inserted of %d\n",device);
DrewSchaef 0:bcad524c1856 364 u32 sramLen;
DrewSchaef 0:bcad524c1856 365 u8* sram = USBGetBuffer(&sramLen);
DrewSchaef 0:bcad524c1856 366 sram = (u8*)(((u32)sram + 1023) & ~1023);
DrewSchaef 0:bcad524c1856 367 SRAMPlacement* s = (SRAMPlacement*)sram;
DrewSchaef 0:bcad524c1856 368 _HCITransportUSB.Open(device,s->_hciBuffer,s->_aclBuffer);
DrewSchaef 0:bcad524c1856 369 _HCI.Open(&_HCITransportUSB,HciCallback);
DrewSchaef 0:bcad524c1856 370 RegisterSocketHandler(SOCKET_L2CAP,&_HCI);
DrewSchaef 0:bcad524c1856 371 gHCI = &_HCI;
DrewSchaef 0:bcad524c1856 372 gApp.Inquiry();
DrewSchaef 0:bcad524c1856 373 return 0;
DrewSchaef 0:bcad524c1856 374 }
DrewSchaef 0:bcad524c1856 375