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 7e6ee9bd3f..6ade9f82c3 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 b42f574613..4da78b600b 100644 --- a/Source/Core/Core/HW/SI/SI_DeviceGCController.h +++ b/Source/Core/Core/HW/SI/SI_DeviceGCController.h @@ -111,6 +111,7 @@ public: protected: void HandleMoviePadStatus(GCPadStatus* pad_status); + void SetOrigin(const GCPadStatus& pad_status); }; // "TaruKonga", the DK Bongo controller