Queue a read on a controller
| 247 | |
| 248 | // Queue a read on a controller |
| 249 | bool WirelessGamingReceiver::QueueRead(int index) |
| 250 | { |
| 251 | IOUSBCompletion complete; |
| 252 | IOReturn err; |
| 253 | WGRREAD *data = (WGRREAD*)IOMalloc(sizeof(WGRREAD)); |
| 254 | |
| 255 | if (data == NULL) |
| 256 | return false; |
| 257 | data->index = index; |
| 258 | data->buffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, GetMaxPacketSize(connections[index].controllerIn)); |
| 259 | if (data->buffer == NULL) |
| 260 | { |
| 261 | IOFree(data, sizeof(WGRREAD)); |
| 262 | return false; |
| 263 | } |
| 264 | |
| 265 | complete.target = this; |
| 266 | complete.action = _ReadComplete; |
| 267 | complete.parameter = data; |
| 268 | |
| 269 | err = connections[index].controllerIn->Read(data->buffer, 0, 0, data->buffer->getLength(), &complete); |
| 270 | if (err == kIOReturnSuccess) |
| 271 | return true; |
| 272 | |
| 273 | data->buffer->release(); |
| 274 | IOFree(data, sizeof(WGRREAD)); |
| 275 | |
| 276 | // IOLog("read - failed to start (0x%.8x)\n", err); |
| 277 | return false; |
| 278 | } |
| 279 | |
| 280 | // Handle a completed read on a controller |
| 281 | void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) |
nothing calls this directly
no test coverage detected