void Xbox360Peripheral::PadConnect(void) { PadDisconnect(); if (controllerType == XboxOriginal) { padHandler = new XboxOriginalControllerClass; } else if (controllerType == XboxOne) { padHandler = new XboxOneControllerClass; } else { padHandler = new Xbox360ControllerClass; } if (padHandler != NULL) { const OSString *keys[] = { OSString::withCString(kIOSerialDeviceType), OSString::withCString("IOCFPlugInTypes"), OSString::withCString("IOKitDebug"), }; const OSObject *objects[] = { OSNumber::withNumber((unsigned long long)1, 32), getProperty("IOCFPlugInTypes"), OSNumber::withNumber((unsigned long long)65535, 32), }; OSDictionary *dictionary = OSDictionary::withObjects(objects, keys, sizeof(keys) / sizeof(keys[0])); if (padHandler->init(dictionary)) { padHandler->attach(this); padHandler->start(this); } else { padHandler->release(); padHandler = NULL; } } }
// Releases all the objects used void Xbox360Peripheral::ReleaseAll(void) { LockRequired locker(mainLock); SerialDisconnect(); PadDisconnect(); if (serialTimer != NULL) { serialTimer->cancelTimeout(); getWorkLoop()->removeEventSource(serialTimer); serialTimer->release(); serialTimer = NULL; } if (serialInPipe != NULL) { serialInPipe->Abort(); serialInPipe->release(); serialInPipe = NULL; } if (serialInBuffer != NULL) { serialInBuffer->release(); serialInBuffer = NULL; } if (serialIn != NULL) { serialIn->close(this); serialIn = NULL; } if(outPipe!=NULL) { outPipe->Abort(); outPipe->release(); outPipe=NULL; } if(inPipe!=NULL) { inPipe->Abort(); inPipe->release(); inPipe=NULL; } if(inBuffer!=NULL) { inBuffer->release(); inBuffer=NULL; } if(interface!=NULL) { interface->close(this); interface=NULL; } if(device!=NULL) { device->close(this); device=NULL; } }
void Xbox360Peripheral::MakeSettingsChanges() { if (controllerType == XboxOne || controllerType == XboxOneElite) { if (pretend360) // Convert to a 360 controller { PadDisconnect(); previousType = controllerType; controllerType = XboxOnePretend360; PadConnect(); } for (UInt8 i = 0; i < 15; i++) // Change mappings to save time in remapping { switch (mapping[i]) { case 0: { mapping[i] = 8; } break; // Move to Up position case 1: { mapping[i] = 9; } break; // Move to Down position case 2: { mapping[i] = 10; } break; // Move to Left position case 3: { mapping[i] = 11; } break; // Move to Right position case 4: { mapping[i] = 2; } break; // Move to Start position case 5: { mapping[i] = 3; } break; // Move to Back position case 6: { mapping[i] = 14; } break; // Move to LB position case 7: { mapping[i] = 15; } break; // Move to RB position case 8: { mapping[i] = 12; } break; // Move to LSC position case 9: { mapping[i] = 13; } break; // Move to RSC position case 10: { mapping[i] = 0; } break; // Move to Guide position case 12: { mapping[i] = 4; } break; // Move to A position case 13: { mapping[i] = 5; } break; // Move to B position case 14: { mapping[i] = 6; } break; // Move to X position case 15: { mapping[i] = 7; } break; // Move to Y position } } } if (controllerType == XboxOnePretend360) { if (!pretend360) { PadDisconnect(); controllerType = previousType; PadConnect(); } for (UInt8 i = 0; i < 15; i++) // Change mappings to save time in remapping { switch (mapping[i]) { case 0: { mapping[i] = 8; } break; // Move to Up position case 1: { mapping[i] = 9; } break; // Move to Down position case 2: { mapping[i] = 10; } break; // Move to Left position case 3: { mapping[i] = 11; } break; // Move to Right position case 4: { mapping[i] = 2; } break; // Move to Start position case 5: { mapping[i] = 3; } break; // Move to Back position case 6: { mapping[i] = 14; } break; // Move to LB position case 7: { mapping[i] = 15; } break; // Move to RB position case 8: { mapping[i] = 12; } break; // Move to LSC position case 9: { mapping[i] = 13; } break; // Move to RSC position case 10: { mapping[i] = 0; } break; // Move to Guide position case 12: { mapping[i] = 4; } break; // Move to A position case 13: { mapping[i] = 5; } break; // Move to B position case 14: { mapping[i] = 6; } break; // Move to X position case 15: { mapping[i] = 7; } break; // Move to Y position } } } }