Ejemplo n.º 1
0
void Xbox360Peripheral::SendToggle(void)
{
	SendSpecial(serialToggle ? 0x1F : 0x1E);
	serialToggle = !serialToggle;
}
Ejemplo n.º 2
0
void Xbox360Peripheral::ChatPadTimerAction(IOTimerEventSource *sender)
{
    int nextTime, serialGot;
    
    serialGot = 0;
    nextTime = 1000;
    switch (serialTimerState)
    {
        case tsToggle:
            SendToggle();
            if (serialActive)
            {
                if (!serialHeard)
                {
                    serialActive = false;
                    serialGot = 2;
                }
            }
            else
            {
                if (serialHeard)
                {
                    serialTimerState = tsReset1;
                    serialResetCount = 0;
                    nextTime = 40;
                }
            }
            break;
            
        case tsMiniToggle:
            SendToggle();
            if (serialHeard)
            {
                serialTimerState = tsSet1;
                nextTime = 40;
            }
            else
            {
                serialResetCount++;
                if (serialResetCount > 3)
                {
                    serialTimerState = tsToggle;
                }
                else
                {
                    serialTimerState = tsReset1;
                    nextTime = 40;
                }
            }
            break;
            
        case tsReset1:
            SendSpecial(0x1B);
            serialTimerState = tsReset2;
            nextTime = 35;
            break;
            
        case tsReset2:
            SendSpecial(0x1B);
            serialTimerState = tsMiniToggle;
            nextTime = 150;
            break;
            
        case tsSet1:
            SendSpecial(0x18);
            serialTimerState = tsSet2;
            nextTime = 10;
            break;
            
        case tsSet2:
            SendSpecial(0x10);
            serialTimerState = tsSet3;
            nextTime = 10;
            break;
            
        case tsSet3:
            SendSpecial(0x03);
            serialTimerState = tsToggle;
            nextTime = 940;
            serialActive = true;
            serialGot = 1;
            break;
    }
    sender->setTimeoutMS(nextTime);	// Todo: Make it take into account function execution time?
    serialHeard = false;
    // Make it happen after the timer's set, for minimum impact
    switch (serialGot)
    {
        case 1:
            SerialConnect();
            break;
            
        case 2:
            SerialDisconnect();
            break;
            
        default:
            break;
    }
}