diff --git a/Source/Core/Core/HW/SI/SI_DeviceGCAdapter.cpp b/Source/Core/Core/HW/SI/SI_DeviceGCAdapter.cpp index 3ef843f950..4e18ae39a7 100644 --- a/Source/Core/Core/HW/SI/SI_DeviceGCAdapter.cpp +++ b/Source/Core/Core/HW/SI/SI_DeviceGCAdapter.cpp @@ -37,6 +37,11 @@ GCPadStatus CSIDevice_GCAdapter::GetPadStatus() HandleMoviePadStatus(&pad_status); + // Our GCAdapter code sets PAD_GET_ORIGIN when a new device has been connected. + // Watch for this to calibrate real controllers on connection. + if (pad_status.button & PAD_GET_ORIGIN) + SetOrigin(pad_status); + return pad_status; } diff --git a/Source/Core/Core/HW/SI/SI_DeviceGCController.cpp b/Source/Core/Core/HW/SI/SI_DeviceGCController.cpp index eb5a829721..11494cae46 100644 --- a/Source/Core/Core/HW/SI/SI_DeviceGCController.cpp +++ b/Source/Core/Core/HW/SI/SI_DeviceGCController.cpp @@ -149,6 +149,12 @@ GCPadStatus CSIDevice_GCController::GetPadStatus() } HandleMoviePadStatus(&pad_status); + + // Our GCAdapter code sets PAD_GET_ORIGIN when a new device has been connected. + // Watch for this to calibrate real controllers on connection. + if (pad_status.button & PAD_GET_ORIGIN) + SetOrigin(pad_status); + return pad_status; } @@ -257,16 +263,13 @@ CSIDevice_GCController::HandleButtonCombos(const GCPadStatus& pad_status) { if (m_last_button_combo == COMBO_RESET) { + INFO_LOG(SERIALINTERFACE, "PAD - COMBO_RESET"); ProcessorInterface::ResetButton_Tap(); } else if (m_last_button_combo == COMBO_ORIGIN) { - m_origin.origin_stick_x = pad_status.stickX; - m_origin.origin_stick_y = pad_status.stickY; - m_origin.substick_x = pad_status.substickX; - m_origin.substick_y = pad_status.substickY; - m_origin.trigger_left = pad_status.triggerLeft; - m_origin.trigger_right = pad_status.triggerRight; + INFO_LOG(SERIALINTERFACE, "PAD - COMBO_ORIGIN"); + SetOrigin(pad_status); } m_last_button_combo = COMBO_NONE; @@ -277,6 +280,16 @@ CSIDevice_GCController::HandleButtonCombos(const GCPadStatus& pad_status) return COMBO_NONE; } +void CSIDevice_GCController::SetOrigin(const GCPadStatus& pad_status) +{ + m_origin.origin_stick_x = pad_status.stickX; + m_origin.origin_stick_y = pad_status.stickY; + m_origin.substick_x = pad_status.substickX; + m_origin.substick_y = pad_status.substickY; + m_origin.trigger_left = pad_status.triggerLeft; + m_origin.trigger_right = pad_status.triggerRight; +} + // SendCommand void CSIDevice_GCController::SendCommand(u32 command, u8 poll) { diff --git a/Source/Core/Core/HW/SI/SI_DeviceGCController.h b/Source/Core/Core/HW/SI/SI_DeviceGCController.h index 217880c9cd..218c715e51 100644 --- a/Source/Core/Core/HW/SI/SI_DeviceGCController.h +++ b/Source/Core/Core/HW/SI/SI_DeviceGCController.h @@ -110,6 +110,7 @@ public: protected: void HandleMoviePadStatus(GCPadStatus* pad_status); + void SetOrigin(const GCPadStatus& pad_status); }; // "TaruKonga", the DK Bongo controller