This program is for an autonomous robot for the competition at the Hochschule Luzern. http://cruisingcrepe.wordpress.com/ We are one of the 32 teams. http://cruisingcrepe.wordpress.com/ The postition control is based on this Documentation: Control of Wheeled Mobile Robots: An Experimental Overview from Alessandro De Luca, Giuseppe Oriolo, Marilena Vendittelli. For more information see here: http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf

Dependencies:   mbed

Fork of autonomous Robot Android by Christian Burri

Committer:
chrigelburri
Date:
Sat Mar 23 13:52:48 2013 +0000
Revision:
6:48eeb41188dd
mit link und rechten Radradius

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrigelburri 6:48eeb41188dd 1 #include <stdio.h>
chrigelburri 6:48eeb41188dd 2 #include <stdlib.h>
chrigelburri 6:48eeb41188dd 3 #include <string.h>
chrigelburri 6:48eeb41188dd 4
chrigelburri 6:48eeb41188dd 5 #include "USBHost.h"
chrigelburri 6:48eeb41188dd 6 #include "AndroidAccessory.h"
chrigelburri 6:48eeb41188dd 7 #include "mbed.h"
chrigelburri 6:48eeb41188dd 8
chrigelburri 6:48eeb41188dd 9 AndroidAccessory* _adk;
chrigelburri 6:48eeb41188dd 10
chrigelburri 6:48eeb41188dd 11 void AdkreadCallback(int device, int endpoint, int status, u8* buf, int len, void* userData);
chrigelburri 6:48eeb41188dd 12 void AdkwriteCallback(int device, int endpoint, int status, u8* buf, int len, void* userData);
chrigelburri 6:48eeb41188dd 13
chrigelburri 6:48eeb41188dd 14
chrigelburri 6:48eeb41188dd 15
chrigelburri 6:48eeb41188dd 16 AndroidAccessory::AndroidAccessory(int rbuffsize,int wbuffsize,
chrigelburri 6:48eeb41188dd 17 const char* manufacturer,
chrigelburri 6:48eeb41188dd 18 const char *model,
chrigelburri 6:48eeb41188dd 19 const char *description,
chrigelburri 6:48eeb41188dd 20 const char *version,
chrigelburri 6:48eeb41188dd 21 const char *uri,
chrigelburri 6:48eeb41188dd 22 const char *serial
chrigelburri 6:48eeb41188dd 23 ) {
chrigelburri 6:48eeb41188dd 24
chrigelburri 6:48eeb41188dd 25 _adk=this;
chrigelburri 6:48eeb41188dd 26
chrigelburri 6:48eeb41188dd 27 this->manufacturer=manufacturer;
chrigelburri 6:48eeb41188dd 28 this->model=model;
chrigelburri 6:48eeb41188dd 29 this->description=description;
chrigelburri 6:48eeb41188dd 30 this->version=version;
chrigelburri 6:48eeb41188dd 31 this->uri=uri;
chrigelburri 6:48eeb41188dd 32 this->serial=serial;
chrigelburri 6:48eeb41188dd 33
chrigelburri 6:48eeb41188dd 34 u32 len;
chrigelburri 6:48eeb41188dd 35 u8* p=USBGetBuffer(&len);
chrigelburri 6:48eeb41188dd 36 if (len<(rbuffsize+wbuffsize+255)) {
chrigelburri 6:48eeb41188dd 37 error("buff size too big.please resize max=%d. currentSize=%d\r\n",len,(rbuffsize+wbuffsize+255));
chrigelburri 6:48eeb41188dd 38 }
chrigelburri 6:48eeb41188dd 39
chrigelburri 6:48eeb41188dd 40 _readbuff=p;
chrigelburri 6:48eeb41188dd 41 _readbuffsize=rbuffsize;
chrigelburri 6:48eeb41188dd 42 p+=rbuffsize;
chrigelburri 6:48eeb41188dd 43 _writebuff=p;
chrigelburri 6:48eeb41188dd 44 _writebuffsize=wbuffsize;
chrigelburri 6:48eeb41188dd 45 p+=wbuffsize;
chrigelburri 6:48eeb41188dd 46 _strbuff=p;
chrigelburri 6:48eeb41188dd 47 p+=255;
chrigelburri 6:48eeb41188dd 48
chrigelburri 6:48eeb41188dd 49 }
chrigelburri 6:48eeb41188dd 50
chrigelburri 6:48eeb41188dd 51
chrigelburri 6:48eeb41188dd 52
chrigelburri 6:48eeb41188dd 53 int AndroidAccessory::write(u8 *buff, int len) {
chrigelburri 6:48eeb41188dd 54 log("AndroidAccessory::write ");
chrigelburri 6:48eeb41188dd 55 // __disable_irq();
chrigelburri 6:48eeb41188dd 56 int ret=USBBulkTransfer(_device,output_ep,buff,len,AdkwriteCallback,this);
chrigelburri 6:48eeb41188dd 57 // __enable_irq();
chrigelburri 6:48eeb41188dd 58 log("--ret=%d \r\n",ret);
chrigelburri 6:48eeb41188dd 59 return ret;
chrigelburri 6:48eeb41188dd 60 }
chrigelburri 6:48eeb41188dd 61 int AndroidAccessory::writeNC(u8 *buff, int len) {
chrigelburri 6:48eeb41188dd 62 log("AndroidAccessory::write ");
chrigelburri 6:48eeb41188dd 63 // __disable_irq();
chrigelburri 6:48eeb41188dd 64 int ret=USBBulkTransfer(_device,output_ep,buff,len);
chrigelburri 6:48eeb41188dd 65 // __enable_irq();
chrigelburri 6:48eeb41188dd 66 log("--ret=%d \r\n",ret);
chrigelburri 6:48eeb41188dd 67 return ret;
chrigelburri 6:48eeb41188dd 68 }
chrigelburri 6:48eeb41188dd 69
chrigelburri 6:48eeb41188dd 70
chrigelburri 6:48eeb41188dd 71
chrigelburri 6:48eeb41188dd 72 int AndroidAccessory::read(u8 *buff, int len) {
chrigelburri 6:48eeb41188dd 73 // if(_initok==false)return 0;
chrigelburri 6:48eeb41188dd 74
chrigelburri 6:48eeb41188dd 75 log("AndroidAccessory::read ");
chrigelburri 6:48eeb41188dd 76 // __disable_irq();
chrigelburri 6:48eeb41188dd 77 int ret=USBBulkTransfer(_device,input_ep|0x80,buff,len);
chrigelburri 6:48eeb41188dd 78 // __enable_irq();
chrigelburri 6:48eeb41188dd 79 log("--ret=%d \r\n",ret);
chrigelburri 6:48eeb41188dd 80 return ret;
chrigelburri 6:48eeb41188dd 81 }
chrigelburri 6:48eeb41188dd 82
chrigelburri 6:48eeb41188dd 83
chrigelburri 6:48eeb41188dd 84 void AndroidAccessory::init(int device, int configuration, int interfaceNumber) {
chrigelburri 6:48eeb41188dd 85
chrigelburri 6:48eeb41188dd 86 log("AndroidAccessory::init \r\n");
chrigelburri 6:48eeb41188dd 87
chrigelburri 6:48eeb41188dd 88 // _initok=false;
chrigelburri 6:48eeb41188dd 89 _device = device;
chrigelburri 6:48eeb41188dd 90 _configuration = configuration;
chrigelburri 6:48eeb41188dd 91 _interfaceNumber = interfaceNumber;
chrigelburri 6:48eeb41188dd 92 printf("device = %d configuration = %d interfaceNumber = %d\r\n", device, configuration, interfaceNumber);
chrigelburri 6:48eeb41188dd 93 int err;
chrigelburri 6:48eeb41188dd 94
chrigelburri 6:48eeb41188dd 95 u8* buffer=_strbuff;
chrigelburri 6:48eeb41188dd 96 err = GetDescriptor(_device,DESCRIPTOR_TYPE_CONFIGURATION,0,buffer,4);
chrigelburri 6:48eeb41188dd 97
chrigelburri 6:48eeb41188dd 98 if (err < 0) {
chrigelburri 6:48eeb41188dd 99 log("Failed to get descriptor\r\n");
chrigelburri 6:48eeb41188dd 100 return;
chrigelburri 6:48eeb41188dd 101 }
chrigelburri 6:48eeb41188dd 102
chrigelburri 6:48eeb41188dd 103
chrigelburri 6:48eeb41188dd 104 int len = buffer[2] | (buffer[3] << 8);
chrigelburri 6:48eeb41188dd 105 if (len > 255) {
chrigelburri 6:48eeb41188dd 106 log("config descriptor too large\n");
chrigelburri 6:48eeb41188dd 107 /* might want to truncate here */
chrigelburri 6:48eeb41188dd 108 return;
chrigelburri 6:48eeb41188dd 109 }
chrigelburri 6:48eeb41188dd 110 err = GetDescriptor(_device,DESCRIPTOR_TYPE_CONFIGURATION,0,buffer,len);
chrigelburri 6:48eeb41188dd 111 u8* p = buffer;
chrigelburri 6:48eeb41188dd 112 input_ep=0;
chrigelburri 6:48eeb41188dd 113 output_ep=0;
chrigelburri 6:48eeb41188dd 114 EndpointDescriptor *epDesc;
chrigelburri 6:48eeb41188dd 115 while (p<(buffer+len)) {
chrigelburri 6:48eeb41188dd 116 u8 descLen = p[0];
chrigelburri 6:48eeb41188dd 117 u8 descType = p[1];
chrigelburri 6:48eeb41188dd 118 log("descLen=%d,descType=%d\r\n",descLen,descType);
chrigelburri 6:48eeb41188dd 119 switch (descType) {
chrigelburri 6:48eeb41188dd 120 case DESCRIPTOR_TYPE_CONFIGURATION:
chrigelburri 6:48eeb41188dd 121 log("config desc\r\n");
chrigelburri 6:48eeb41188dd 122 break;
chrigelburri 6:48eeb41188dd 123 case DESCRIPTOR_TYPE_INTERFACE:
chrigelburri 6:48eeb41188dd 124 log("interface desc\r\n");
chrigelburri 6:48eeb41188dd 125 break;
chrigelburri 6:48eeb41188dd 126 case DESCRIPTOR_TYPE_ENDPOINT:
chrigelburri 6:48eeb41188dd 127 epDesc=(EndpointDescriptor*)p;
chrigelburri 6:48eeb41188dd 128 if (!input_ep && (epDesc->bEndpointAddress& 0x80)) {
chrigelburri 6:48eeb41188dd 129 input_ep=epDesc->bEndpointAddress& 0x7f;
chrigelburri 6:48eeb41188dd 130 //PacketSize drop
chrigelburri 6:48eeb41188dd 131 log("input Endpoint address=%d,wMaxPacketSize=%d,bmAttributes=%d\r\n",input_ep,epDesc->wMaxPacketSize,epDesc->bmAttributes);
chrigelburri 6:48eeb41188dd 132
chrigelburri 6:48eeb41188dd 133 } else if (!output_ep) {
chrigelburri 6:48eeb41188dd 134 output_ep=epDesc->bEndpointAddress& 0x7f;
chrigelburri 6:48eeb41188dd 135 //PacketSize drop
chrigelburri 6:48eeb41188dd 136 log("output Endpoint address=%d,wMaxPacketSize=%d,bmAttributes=%d\r\n",input_ep,epDesc->wMaxPacketSize,epDesc->bmAttributes);
chrigelburri 6:48eeb41188dd 137 } else {
chrigelburri 6:48eeb41188dd 138 //other
chrigelburri 6:48eeb41188dd 139 log("non input,output Endpoint address=%d,wMaxPacketSize=%d,bmAttributes=%d\r\n",input_ep,epDesc->wMaxPacketSize,epDesc->bmAttributes);
chrigelburri 6:48eeb41188dd 140 }
chrigelburri 6:48eeb41188dd 141 break;
chrigelburri 6:48eeb41188dd 142 default:
chrigelburri 6:48eeb41188dd 143 log("unkown desc type(%d) \r\n",descType);
chrigelburri 6:48eeb41188dd 144 }
chrigelburri 6:48eeb41188dd 145 p+=descLen;
chrigelburri 6:48eeb41188dd 146 }
chrigelburri 6:48eeb41188dd 147
chrigelburri 6:48eeb41188dd 148 if (!(input_ep && output_ep)) {
chrigelburri 6:48eeb41188dd 149 log("can't find accessory endpoints\r\n");
chrigelburri 6:48eeb41188dd 150 return;
chrigelburri 6:48eeb41188dd 151 }
chrigelburri 6:48eeb41188dd 152
chrigelburri 6:48eeb41188dd 153 log("SetConfiguration\r\n");
chrigelburri 6:48eeb41188dd 154 err = SetConfiguration(device,configuration);
chrigelburri 6:48eeb41188dd 155 if (err < 0) {
chrigelburri 6:48eeb41188dd 156 log("SetConfiguration error\r\n");
chrigelburri 6:48eeb41188dd 157 return;
chrigelburri 6:48eeb41188dd 158 }
chrigelburri 6:48eeb41188dd 159
chrigelburri 6:48eeb41188dd 160
chrigelburri 6:48eeb41188dd 161 log("interrupt setup\r\n");
chrigelburri 6:48eeb41188dd 162 //interrupt setup
chrigelburri 6:48eeb41188dd 163 if (_readbuff==NULL || _readbuffsize<=0) {
chrigelburri 6:48eeb41188dd 164 error("_readbuffer error please setup buffer call setReadBuffer function\r\n");
chrigelburri 6:48eeb41188dd 165 }
chrigelburri 6:48eeb41188dd 166
chrigelburri 6:48eeb41188dd 167 if (IO_PENDING!=USBBulkTransfer(_device,input_ep|0x80,_readbuff,_readbuffsize,AdkreadCallback,this))
chrigelburri 6:48eeb41188dd 168 return;
chrigelburri 6:48eeb41188dd 169
chrigelburri 6:48eeb41188dd 170
chrigelburri 6:48eeb41188dd 171 log("setupDevice\r\n");
chrigelburri 6:48eeb41188dd 172 this->setupDevice();
chrigelburri 6:48eeb41188dd 173 // _initok=true;
chrigelburri 6:48eeb41188dd 174 }
chrigelburri 6:48eeb41188dd 175
chrigelburri 6:48eeb41188dd 176
chrigelburri 6:48eeb41188dd 177
chrigelburri 6:48eeb41188dd 178 bool AndroidAccessory::switchDevice(int device) {
chrigelburri 6:48eeb41188dd 179
chrigelburri 6:48eeb41188dd 180 if (1==getProtocol(device)) {
chrigelburri 6:48eeb41188dd 181 log("device supports protocol 1\r\n");
chrigelburri 6:48eeb41188dd 182
chrigelburri 6:48eeb41188dd 183 } else {
chrigelburri 6:48eeb41188dd 184 log("could not read device protocol version\r\n");
chrigelburri 6:48eeb41188dd 185 return false;
chrigelburri 6:48eeb41188dd 186 }
chrigelburri 6:48eeb41188dd 187
chrigelburri 6:48eeb41188dd 188
chrigelburri 6:48eeb41188dd 189 sendString(device,ACCESSORY_STRING_MANUFACTURER,manufacturer);
chrigelburri 6:48eeb41188dd 190 sendString(device,ACCESSORY_STRING_MODEL,model);
chrigelburri 6:48eeb41188dd 191 sendString(device,ACCESSORY_STRING_DESCRIPTION,description);
chrigelburri 6:48eeb41188dd 192 sendString(device,ACCESSORY_STRING_VERSION,version);
chrigelburri 6:48eeb41188dd 193 sendString(device,ACCESSORY_STRING_URI,uri);
chrigelburri 6:48eeb41188dd 194 sendString(device,ACCESSORY_STRING_SERIAL,serial);
chrigelburri 6:48eeb41188dd 195 USBControlTransfer(device,
chrigelburri 6:48eeb41188dd 196 HOST_TO_DEVICE |REQUEST_TYPE_VENDOR|RECIPIENT_DEVICE,
chrigelburri 6:48eeb41188dd 197 ACCESSORY_START,
chrigelburri 6:48eeb41188dd 198 0,//value
chrigelburri 6:48eeb41188dd 199 0, //index
chrigelburri 6:48eeb41188dd 200 0,
chrigelburri 6:48eeb41188dd 201 0,
chrigelburri 6:48eeb41188dd 202 0,
chrigelburri 6:48eeb41188dd 203 0 );
chrigelburri 6:48eeb41188dd 204
chrigelburri 6:48eeb41188dd 205 wait_ms(4);
chrigelburri 6:48eeb41188dd 206 //reset usb host
chrigelburri 6:48eeb41188dd 207 USBInit();
chrigelburri 6:48eeb41188dd 208
chrigelburri 6:48eeb41188dd 209 return true;
chrigelburri 6:48eeb41188dd 210
chrigelburri 6:48eeb41188dd 211 }
chrigelburri 6:48eeb41188dd 212
chrigelburri 6:48eeb41188dd 213
chrigelburri 6:48eeb41188dd 214 int AndroidAccessory::getProtocol(int device) {
chrigelburri 6:48eeb41188dd 215 s16 data=-1;
chrigelburri 6:48eeb41188dd 216 USBControlTransfer(device,
chrigelburri 6:48eeb41188dd 217 DEVICE_TO_HOST|REQUEST_TYPE_VENDOR|RECIPIENT_DEVICE,
chrigelburri 6:48eeb41188dd 218 ACCESSORY_GET_PROTOCOL,
chrigelburri 6:48eeb41188dd 219 0,//value
chrigelburri 6:48eeb41188dd 220 0, //index
chrigelburri 6:48eeb41188dd 221 (u8*)&data,
chrigelburri 6:48eeb41188dd 222 2,
chrigelburri 6:48eeb41188dd 223 0,
chrigelburri 6:48eeb41188dd 224 0 );
chrigelburri 6:48eeb41188dd 225 return data;
chrigelburri 6:48eeb41188dd 226
chrigelburri 6:48eeb41188dd 227 }
chrigelburri 6:48eeb41188dd 228
chrigelburri 6:48eeb41188dd 229 void AndroidAccessory::sendString(const char *str) {
chrigelburri 6:48eeb41188dd 230 sendString(_device,1,str);
chrigelburri 6:48eeb41188dd 231
chrigelburri 6:48eeb41188dd 232 }
chrigelburri 6:48eeb41188dd 233
chrigelburri 6:48eeb41188dd 234 void AndroidAccessory::sendString(int device, int index, const char *str) {
chrigelburri 6:48eeb41188dd 235
chrigelburri 6:48eeb41188dd 236 LOG("send_string start(%d,%d,%s) %d \r\n",device,index,str,strlen(str)+1);
chrigelburri 6:48eeb41188dd 237 strcpy((char*)_strbuff,str);
chrigelburri 6:48eeb41188dd 238 //thankyou curryman san
chrigelburri 6:48eeb41188dd 239 USBControlTransfer(device,
chrigelburri 6:48eeb41188dd 240 HOST_TO_DEVICE|REQUEST_TYPE_VENDOR|RECIPIENT_DEVICE,
chrigelburri 6:48eeb41188dd 241 ACCESSORY_SEND_STRING,
chrigelburri 6:48eeb41188dd 242 0,//value
chrigelburri 6:48eeb41188dd 243 index,
chrigelburri 6:48eeb41188dd 244 _strbuff,
chrigelburri 6:48eeb41188dd 245 strlen(str)+1
chrigelburri 6:48eeb41188dd 246 );
chrigelburri 6:48eeb41188dd 247
chrigelburri 6:48eeb41188dd 248 LOG("send_string end(%d,%d,%s)\r\n",device,index,str);
chrigelburri 6:48eeb41188dd 249
chrigelburri 6:48eeb41188dd 250 }
chrigelburri 6:48eeb41188dd 251
chrigelburri 6:48eeb41188dd 252
chrigelburri 6:48eeb41188dd 253 /** from USBHost load function. initialize Android device**/
chrigelburri 6:48eeb41188dd 254 void OnLoadDevice(int device, DeviceDescriptor* deviceDesc, InterfaceDescriptor* interfaceDesc) {
chrigelburri 6:48eeb41188dd 255 printf("LoadDevice %d %02X:%02X:%02X\r\n",device,interfaceDesc->bInterfaceClass,interfaceDesc->bInterfaceSubClass,interfaceDesc->bInterfaceProtocol);
chrigelburri 6:48eeb41188dd 256 char s[128];
chrigelburri 6:48eeb41188dd 257
chrigelburri 6:48eeb41188dd 258 for (int i = 1; i < 3; i++) {
chrigelburri 6:48eeb41188dd 259 if (GetString(device,i,s,sizeof(s)) < 0)
chrigelburri 6:48eeb41188dd 260 break;
chrigelburri 6:48eeb41188dd 261 printf("%d: %s\r\n",i,s);
chrigelburri 6:48eeb41188dd 262 }
chrigelburri 6:48eeb41188dd 263
chrigelburri 6:48eeb41188dd 264 //for android ADK
chrigelburri 6:48eeb41188dd 265 if ( ( deviceDesc->idVendor != 0x18D1 ||
chrigelburri 6:48eeb41188dd 266 ( deviceDesc->idProduct != 0x2D00 && deviceDesc->idProduct != 0x2D01))
chrigelburri 6:48eeb41188dd 267 &&_adk->switchDevice(device)) {
chrigelburri 6:48eeb41188dd 268
chrigelburri 6:48eeb41188dd 269 printf(" try to change accmode.interfaceDesc->bInterfaceClass=%d\r\n",interfaceDesc->bInterfaceClass);
chrigelburri 6:48eeb41188dd 270 //1th root
chrigelburri 6:48eeb41188dd 271 //accmode_support=true;
chrigelburri 6:48eeb41188dd 272 printf("accessory mode ok.\r\n");
chrigelburri 6:48eeb41188dd 273 return;
chrigelburri 6:48eeb41188dd 274 }
chrigelburri 6:48eeb41188dd 275
chrigelburri 6:48eeb41188dd 276 if (deviceDesc->idVendor == 0x18D1 &&
chrigelburri 6:48eeb41188dd 277 (deviceDesc->idProduct == 0x2D00 || deviceDesc->idProduct == 0x2D01)) {
chrigelburri 6:48eeb41188dd 278 //2th root
chrigelburri 6:48eeb41188dd 279 printf("connecting Android.\r\n");
chrigelburri 6:48eeb41188dd 280 printf("idVender=%x idProduct=%x interfaceDesc->bInterfaceClass=%d\r\n",deviceDesc->idVendor,deviceDesc->idProduct,interfaceDesc->bInterfaceClass);
chrigelburri 6:48eeb41188dd 281 _adk->init(device,1,0);
chrigelburri 6:48eeb41188dd 282 //_AdkUSB.loop();
chrigelburri 6:48eeb41188dd 283 return;
chrigelburri 6:48eeb41188dd 284 }
chrigelburri 6:48eeb41188dd 285 }
chrigelburri 6:48eeb41188dd 286
chrigelburri 6:48eeb41188dd 287 void AdkreadCallback(int device, int endpoint, int status, u8* buf, int len, void* userData) {
chrigelburri 6:48eeb41188dd 288 log("AdkreadCallback(int device=%d, int endpoint=%x, int status=%d, u8* buf=%p, int len=%d, void* userData=%p)\r\n",
chrigelburri 6:48eeb41188dd 289 device,endpoint,status,buf,len,userData);
chrigelburri 6:48eeb41188dd 290 // __disable_irq();
chrigelburri 6:48eeb41188dd 291 AndroidAccessory* t = (AndroidAccessory*)userData;
chrigelburri 6:48eeb41188dd 292 if (status!=0 && status!=8) {
chrigelburri 6:48eeb41188dd 293 log("adk end.\r\n");
chrigelburri 6:48eeb41188dd 294 t->adkEnd();
chrigelburri 6:48eeb41188dd 295 // __enable_irq();
chrigelburri 6:48eeb41188dd 296 USBInit();
chrigelburri 6:48eeb41188dd 297 return;
chrigelburri 6:48eeb41188dd 298 }
chrigelburri 6:48eeb41188dd 299
chrigelburri 6:48eeb41188dd 300
chrigelburri 6:48eeb41188dd 301 //virtual method run
chrigelburri 6:48eeb41188dd 302 t->callbackRead(buf,len);
chrigelburri 6:48eeb41188dd 303
chrigelburri 6:48eeb41188dd 304 USBBulkTransfer(device, endpoint , buf, len, AdkreadCallback, userData);
chrigelburri 6:48eeb41188dd 305
chrigelburri 6:48eeb41188dd 306 // wait_ms(4);
chrigelburri 6:48eeb41188dd 307 // __enable_irq();
chrigelburri 6:48eeb41188dd 308 }
chrigelburri 6:48eeb41188dd 309
chrigelburri 6:48eeb41188dd 310
chrigelburri 6:48eeb41188dd 311
chrigelburri 6:48eeb41188dd 312
chrigelburri 6:48eeb41188dd 313 void AdkwriteCallback(int device, int endpoint, int status, u8* buf, int len, void* userData) {
chrigelburri 6:48eeb41188dd 314
chrigelburri 6:48eeb41188dd 315 log("AdkwriteCallback(int device=%d, int endpoint=%x, int status=%d, u8* buf=%p, int len=%d, void* userData=%p)\r\n",
chrigelburri 6:48eeb41188dd 316 device,endpoint,status,buf,len,userData);
chrigelburri 6:48eeb41188dd 317
chrigelburri 6:48eeb41188dd 318 AndroidAccessory* t = (AndroidAccessory*)userData;
chrigelburri 6:48eeb41188dd 319 t->callbackWrite();
chrigelburri 6:48eeb41188dd 320 //wait_ms(4);
chrigelburri 6:48eeb41188dd 321 //USBBulkTransfer(device, endpoint , buf, len, AdkwriteCallback, userData);
chrigelburri 6:48eeb41188dd 322 }
chrigelburri 6:48eeb41188dd 323