Queue an asynchronous write on a controller
| 311 | |
| 312 | // Queue an asynchronous write on a controller |
| 313 | bool WirelessGamingReceiver::QueueWrite(int index, const void *bytes, UInt32 length) |
| 314 | { |
| 315 | IOBufferMemoryDescriptor *outBuffer; |
| 316 | IOUSBCompletion complete; |
| 317 | IOReturn err; |
| 318 | |
| 319 | outBuffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, length); |
| 320 | if (outBuffer == NULL) |
| 321 | { |
| 322 | // IOLog("send - unable to allocate buffer\n"); |
| 323 | return false; |
| 324 | } |
| 325 | outBuffer->writeBytes(0, bytes, length); |
| 326 | |
| 327 | complete.target = this; |
| 328 | complete.action = _WriteComplete; |
| 329 | complete.parameter = outBuffer; |
| 330 | |
| 331 | err = connections[index].controllerOut->Write(outBuffer, 0, 0, length, &complete); |
| 332 | if (err == kIOReturnSuccess) |
| 333 | return true; |
| 334 | else |
| 335 | { |
| 336 | // IOLog("send - failed to start (0x%.8x)\n",err); |
| 337 | return false; |
| 338 | } |
| 339 | } |
| 340 | |
| 341 | // Handle a completed write on a controller |
| 342 | void WirelessGamingReceiver::WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) |