Handle a completed read on a controller
| 279 | |
| 280 | // Handle a completed read on a controller |
| 281 | void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) |
| 282 | { |
| 283 | WGRREAD *data = (WGRREAD*)parameter; |
| 284 | bool reread = true; |
| 285 | |
| 286 | switch (status) |
| 287 | { |
| 288 | case kIOReturnOverrun: |
| 289 | // IOLog("read - kIOReturnOverrun, clearing stall\n"); |
| 290 | connections[data->index].controllerIn->ClearStall(); |
| 291 | // fall through |
| 292 | case kIOReturnSuccess: |
| 293 | ProcessMessage(data->index, (unsigned char*)data->buffer->getBytesNoCopy(), (int)data->buffer->getLength() - bufferSizeRemaining); |
| 294 | break; |
| 295 | |
| 296 | case kIOReturnNotResponding: |
| 297 | // IOLog("read - kIOReturnNotResponding\n"); |
| 298 | // fall through |
| 299 | default: |
| 300 | reread = false; |
| 301 | break; |
| 302 | } |
| 303 | |
| 304 | int newIndex = data->index; |
| 305 | data->buffer->release(); |
| 306 | IOFree(data, sizeof(WGRREAD)); |
| 307 | |
| 308 | if (reread) |
| 309 | QueueRead(newIndex); |
| 310 | } |
| 311 | |
| 312 | // Queue an asynchronous write on a controller |
| 313 | bool WirelessGamingReceiver::QueueWrite(int index, const void *bytes, UInt32 length) |