long PAD__readPort1(PadDataS* ppad) { int Control = 0; #if defined(WII) && !defined(NO_BT) //Need to switch between Classic and WiimoteNunchuck if user swapped extensions if (padType[virtualControllers[Control].number] == PADTYPE_WII) { if (virtualControllers[Control].control != &controller_WiiUPro) { if (virtualControllers[Control].control == &controller_Classic && !controller_Classic.available[virtualControllers[Control].number] && controller_WiimoteNunchuk.available[virtualControllers[Control].number]) assign_controller(Control, &controller_WiimoteNunchuk, virtualControllers[Control].number); else if (virtualControllers[Control].control == &controller_WiimoteNunchuk && !controller_WiimoteNunchuk.available[virtualControllers[Control].number] && controller_Classic.available[virtualControllers[Control].number]) assign_controller(Control, &controller_Classic, virtualControllers[Control].number); } } #endif if(virtualControllers[Control].inUse) if(DO_CONTROL(Control, GetKeys, (BUTTONS*)&PAD_1, virtualControllers[Control].config)) stop = 1; ppad->buttonStatus = (PAD_1.btns.All&0xFFFF); if ( controllerType == CONTROLLERTYPE_ANALOG ) { ppad->controllerType = PSE_PAD_TYPE_ANALOGPAD; //ppad->controllerType = PSE_PAD_TYPE_ANALOGJOY ; ppad->leftJoyX = PAD_1.leftStickX; ppad->leftJoyY = PAD_1.leftStickY; ppad->rightJoyX = PAD_1.rightStickX; ppad->rightJoyY = PAD_1.rightStickY; } else { ppad->controllerType = PSE_PAD_TYPE_STANDARD; // standard ppad->rightJoyX = ppad->rightJoyY = ppad->leftJoyX = ppad->leftJoyY = 128 ; } return 0 ; }
static void UpdateState (const int pad) //Note: pad = 0 or 1 { const int vib0 = global.padVibF[pad][0] ? 1 : 0; const int vib1 = global.padVibF[pad][1] ? 1 : 0; static BUTTONS PAD_Data; //TODO: Rework/simplify the following code & reset BUTTONS when no controller in use int Control = pad; #if defined(WII) && !defined(NO_BT) //Need to switch between Classic and WiimoteNunchuck if user swapped extensions if (padType[virtualControllers[Control].number] == PADTYPE_WII) { if (virtualControllers[Control].control == &controller_Classic && !controller_Classic.available[virtualControllers[Control].number] && controller_WiimoteNunchuk.available[virtualControllers[Control].number]) assign_controller(Control, &controller_WiimoteNunchuk, virtualControllers[Control].number); else if (virtualControllers[Control].control == &controller_WiimoteNunchuk && !controller_WiimoteNunchuk.available[virtualControllers[Control].number] && controller_Classic.available[virtualControllers[Control].number]) assign_controller(Control, &controller_Classic, virtualControllers[Control].number); } #endif if (global.padMode1[pad] != controllerType) PADsetMode( pad, controllerType == CONTROLLERTYPE_ANALOG ? 1 : 0); if(virtualControllers[Control].inUse) { if(DO_CONTROL(Control, GetKeys, (BUTTONS*)&PAD_Data, virtualControllers[Control].config)) stop = 1; } else { //TODO: Emulate no controller present in this case. //Reset buttons & sticks if PAD is not in use PAD_Data.btns.All = 0xFFFF; PAD_Data.leftStickX = PAD_Data.leftStickY = PAD_Data.rightStickX = PAD_Data.rightStickY = 128; } global.padStat[pad] = (((PAD_Data.btns.All>>8)&0xFF) | ( (PAD_Data.btns.All<<8) & 0xFF00 )) &0xFFFF; if (pad==0) { lastport1.leftJoyX = PAD_Data.leftStickX; lastport1.leftJoyY = PAD_Data.leftStickY; lastport1.rightJoyX = PAD_Data.rightStickX; lastport1.rightJoyY = PAD_Data.rightStickY; lastport1.buttonStatus = global.padStat[pad]; } else { lastport2.leftJoyX = PAD_Data.leftStickX; lastport2.leftJoyY = PAD_Data.leftStickY; lastport2.rightJoyX = PAD_Data.rightStickX; lastport2.rightJoyY = PAD_Data.rightStickY; lastport2.buttonStatus = global.padStat[pad]; } /* Small Motor */ if ((global.padVibF[pad][2] != vib0) ) { global.padVibF[pad][2] = vib0; DO_CONTROL(pad, rumble, global.padVibF[pad][0]); } /* Big Motor */ if ((global.padVibF[pad][3] != vib1) ) { global.padVibF[pad][3] = vib1; DO_CONTROL(pad, rumble, global.padVibF[pad][1]); } }