summaryrefslogtreecommitdiff
path: root/src/input_common/helpers/joycon_protocol/poller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/helpers/joycon_protocol/poller.cpp')
-rw-r--r--src/input_common/helpers/joycon_protocol/poller.cpp22
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
19void JoyconPoller::ReadActiveMode(std::span<u8> buffer, const MotionStatus& motion_status) { 19void 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
63void JoyconPoller::ReadNfcIRMode(std::span<u8> buffer, const MotionStatus& motion_status) { 68void 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
68void JoyconPoller::UpdateColor(const Color& color) { 73void JoyconPoller::UpdateColor(const Color& color) {
69 callbacks.on_color_data(color); 74 callbacks.on_color_data(color);
70} 75}
71 76
77void 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
72void JoyconPoller::UpdateActiveLeftPadInput(const InputReportActive& input, 90void 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{