Пример #1
0
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;
		}
	}
}
Пример #2
0
// 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;
    }
}
Пример #3
0
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
            }
        }
    }
}