diff options
Diffstat (limited to 'src/input_common/helpers/joycon_protocol/poller.cpp')
| -rw-r--r-- | src/input_common/helpers/joycon_protocol/poller.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/input_common/helpers/joycon_protocol/poller.cpp b/src/input_common/helpers/joycon_protocol/poller.cpp index 341479c0c..cb76e1e06 100644 --- a/src/input_common/helpers/joycon_protocol/poller.cpp +++ b/src/input_common/helpers/joycon_protocol/poller.cpp | |||
| @@ -16,7 +16,8 @@ void JoyconPoller::SetCallbacks(const Joycon::JoyconCallbacks& callbacks_) { | |||
| 16 | callbacks = std::move(callbacks_); | 16 | callbacks = std::move(callbacks_); |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | void JoyconPoller::ReadActiveMode(std::span<u8> buffer, const MotionStatus& motion_status) { | 19 | void JoyconPoller::ReadActiveMode(std::span<u8> buffer, const MotionStatus& motion_status, |
| 20 | const RingStatus& ring_status) { | ||
| 20 | InputReportActive data{}; | 21 | InputReportActive data{}; |
| 21 | memcpy(&data, buffer.data(), sizeof(InputReportActive)); | 22 | memcpy(&data, buffer.data(), sizeof(InputReportActive)); |
| 22 | 23 | ||
| @@ -36,6 +37,10 @@ void JoyconPoller::ReadActiveMode(std::span<u8> buffer, const MotionStatus& moti | |||
| 36 | break; | 37 | break; |
| 37 | } | 38 | } |
| 38 | 39 | ||
| 40 | if (ring_status.is_enabled) { | ||
| 41 | UpdateRing(data.ring_input, ring_status); | ||
| 42 | } | ||
| 43 | |||
| 39 | callbacks.on_battery_data(data.battery_status); | 44 | callbacks.on_battery_data(data.battery_status); |
| 40 | } | 45 | } |
| 41 | 46 | ||
| @@ -62,13 +67,26 @@ void JoyconPoller::ReadPassiveMode(std::span<u8> buffer) { | |||
| 62 | 67 | ||
| 63 | void JoyconPoller::ReadNfcIRMode(std::span<u8> buffer, const MotionStatus& motion_status) { | 68 | void JoyconPoller::ReadNfcIRMode(std::span<u8> buffer, const MotionStatus& motion_status) { |
| 64 | // This mode is compatible with the active mode | 69 | // This mode is compatible with the active mode |
| 65 | ReadActiveMode(buffer, motion_status); | 70 | ReadActiveMode(buffer, motion_status, {}); |
| 66 | } | 71 | } |
| 67 | 72 | ||
| 68 | void JoyconPoller::UpdateColor(const Color& color) { | 73 | void JoyconPoller::UpdateColor(const Color& color) { |
| 69 | callbacks.on_color_data(color); | 74 | callbacks.on_color_data(color); |
| 70 | } | 75 | } |
| 71 | 76 | ||
| 77 | void JoyconPoller::UpdateRing(s16 value, const RingStatus& ring_status) { | ||
| 78 | float normalized_value = static_cast<float>(value - ring_status.default_value); | ||
| 79 | if (normalized_value > 0) { | ||
| 80 | normalized_value = normalized_value / | ||
| 81 | static_cast<float>(ring_status.max_value - ring_status.default_value); | ||
| 82 | } | ||
| 83 | if (normalized_value < 0) { | ||
| 84 | normalized_value = normalized_value / | ||
| 85 | static_cast<float>(ring_status.default_value - ring_status.min_value); | ||
| 86 | } | ||
| 87 | callbacks.on_ring_data(normalized_value); | ||
| 88 | } | ||
| 89 | |||
| 72 | void JoyconPoller::UpdateActiveLeftPadInput(const InputReportActive& input, | 90 | void JoyconPoller::UpdateActiveLeftPadInput(const InputReportActive& input, |
| 73 | const MotionStatus& motion_status) { | 91 | const MotionStatus& motion_status) { |
| 74 | static constexpr std::array<Joycon::PadButton, 11> left_buttons{ | 92 | static constexpr std::array<Joycon::PadButton, 11> left_buttons{ |