diff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp index 0e9b592ce1..bf2b41fc6b 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp @@ -21,26 +21,6 @@ namespace WiimoteEmu { constexpr std::array classic_id{{0x00, 0x00, 0xa4, 0x20, 0x01, 0x01}}; -// Classic Controller calibration -constexpr std::array classic_calibration{{ - 0xff, - 0x00, - 0x80, - 0xff, - 0x00, - 0x80, - 0xff, - 0x00, - 0x80, - 0xff, - 0x00, - 0x80, - 0x00, - 0x00, - 0x51, - 0xa6, -}}; - constexpr std::array classic_button_bitmasks{{ Classic::BUTTON_A, Classic::BUTTON_B, @@ -124,9 +104,35 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg) new ControllerEmu::Input(ControllerEmu::Translate, named_direction)); } - // Set up register - m_calibration = classic_calibration; m_id = classic_id; + + // Build calibration data: + m_calibration = {{ + // Left Stick X max,min,center: + CAL_STICK_CENTER + CAL_STICK_RANGE, + CAL_STICK_CENTER - CAL_STICK_RANGE, + CAL_STICK_CENTER, + // Left Stick Y max,min,center: + CAL_STICK_CENTER + CAL_STICK_RANGE, + CAL_STICK_CENTER - CAL_STICK_RANGE, + CAL_STICK_CENTER, + // Right Stick X max,min,center: + CAL_STICK_CENTER + CAL_STICK_RANGE, + CAL_STICK_CENTER - CAL_STICK_RANGE, + CAL_STICK_CENTER, + // Right Stick Y max,min,center: + CAL_STICK_CENTER + CAL_STICK_RANGE, + CAL_STICK_CENTER - CAL_STICK_RANGE, + CAL_STICK_CENTER, + // Left/Right trigger range: (assumed based on real calibration data values) + LEFT_TRIGGER_RANGE, + RIGHT_TRIGGER_RANGE, + // 2 checksum bytes calculated below: + 0x00, + 0x00, + }}; + + UpdateCalibrationDataChecksum(m_calibration); } void Classic::GetState(u8* const data) @@ -213,4 +219,4 @@ ControllerEmu::ControlGroup* Classic::GetGroup(ClassicGroup group) return nullptr; } } -} +} // namespace WiimoteEmu diff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.h b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.h index 9125667ebb..a914569516 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.h +++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.h @@ -12,7 +12,7 @@ class AnalogStick; class Buttons; class ControlGroup; class MixedTriggers; -} +} // namespace ControllerEmu namespace WiimoteEmu { @@ -48,16 +48,25 @@ public: PAD_UP = 0x0100, }; - static const u8 LEFT_STICK_CENTER_X = 0x20; - static const u8 LEFT_STICK_CENTER_Y = 0x20; - static const u8 LEFT_STICK_RADIUS = 0x1F; + enum + { + CAL_STICK_CENTER = 0x80, + CAL_STICK_RANGE = 0x7f, + CAL_STICK_BITS = 8, - static const u8 RIGHT_STICK_CENTER_X = 0x10; - static const u8 RIGHT_STICK_CENTER_Y = 0x10; - static const u8 RIGHT_STICK_RADIUS = 0x0F; + LEFT_STICK_BITS = 6, + LEFT_STICK_CENTER_X = CAL_STICK_CENTER >> (CAL_STICK_BITS - LEFT_STICK_BITS), + LEFT_STICK_CENTER_Y = CAL_STICK_CENTER >> (CAL_STICK_BITS - LEFT_STICK_BITS), + LEFT_STICK_RADIUS = CAL_STICK_RANGE >> (CAL_STICK_BITS - LEFT_STICK_BITS), - static const u8 LEFT_TRIGGER_RANGE = 0x1F; - static const u8 RIGHT_TRIGGER_RANGE = 0x1F; + RIGHT_STICK_BITS = 5, + RIGHT_STICK_CENTER_X = CAL_STICK_CENTER >> (CAL_STICK_BITS - RIGHT_STICK_BITS), + RIGHT_STICK_CENTER_Y = CAL_STICK_CENTER >> (CAL_STICK_BITS - RIGHT_STICK_BITS), + RIGHT_STICK_RADIUS = CAL_STICK_RANGE >> (CAL_STICK_BITS - RIGHT_STICK_BITS), + + LEFT_TRIGGER_RANGE = 0x1F, + RIGHT_TRIGGER_RANGE = 0x1F, + }; private: ControllerEmu::Buttons* m_buttons; @@ -66,4 +75,4 @@ private: ControllerEmu::AnalogStick* m_left_stick; ControllerEmu::AnalogStick* m_right_stick; }; -} +} // namespace WiimoteEmu