void Wireless360Controller::receivedHIDupdate(unsigned char *data, int length) { fiddleReport(data, length); // remapButtons(data); if (swapSticks) remapAxes(data); super::receivedHIDupdate(data, length); }
// This handles a completed asynchronous read void Xbox360Peripheral::ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { if (padHandler != NULL) // avoid deadlock with release { LockRequired locker(mainLock); IOReturn err; bool reread=!isInactive(); switch(status) { case kIOReturnOverrun: IOLog("read - kIOReturnOverrun, clearing stall\n"); if (inPipe != NULL) inPipe->ClearStall(); // Fall through case kIOReturnSuccess: if (inBuffer != NULL) { const XBOX360_IN_REPORT *report=(const XBOX360_IN_REPORT*)inBuffer->getBytesNoCopy(); if((report->header.command==inReport)&&(report->header.size==sizeof(XBOX360_IN_REPORT))) { fiddleReport(inBuffer); err = padHandler->handleReport(inBuffer, kIOHIDReportTypeInput); if(err!=kIOReturnSuccess) { IOLog("read - failed to handle report: 0x%.8x\n",err); } } } break; case kIOReturnNotResponding: IOLog("read - kIOReturnNotResponding\n"); reread=false; break; default: reread=false; break; } if(reread) QueueRead(); } }