MCPcopy Create free account
hub / github.com/360Controller/360Controller / QueueRead

Method QueueRead

WirelessGamingReceiver/WirelessGamingReceiver.cpp:249–278  ·  view source on GitHub ↗

Queue a read on a controller

Source from the content-addressed store, hash-verified

247
248// Queue a read on a controller
249bool 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
281void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining)

Callers

nothing calls this directly

Calls 1

GetMaxPacketSizeFunction · 0.70

Tested by

no test coverage detected