summaryrefslogtreecommitdiff
path: root/src/input_common
diff options
context:
space:
mode:
authorGravatar german772021-04-25 11:45:42 -0500
committerGravatar german772021-04-26 18:34:00 -0500
commit729545a9461a59e6e2b986db3aeb0346624ac8d8 (patch)
tree5ba3c39e9a2536457e1ee11f96cf92fbf6a8b97c /src/input_common
parentMerge pull request #6246 from lioncash/shadow (diff)
downloadyuzu-729545a9461a59e6e2b986db3aeb0346624ac8d8.tar.gz
yuzu-729545a9461a59e6e2b986db3aeb0346624ac8d8.tar.xz
yuzu-729545a9461a59e6e2b986db3aeb0346624ac8d8.zip
input_common: Reset GC sticks center by measuring multiple packets
Diffstat (limited to 'src/input_common')
-rw-r--r--src/input_common/gcadapter/gc_adapter.cpp8
-rw-r--r--src/input_common/gcadapter/gc_adapter.h1
2 files changed, 7 insertions, 2 deletions
diff --git a/src/input_common/gcadapter/gc_adapter.cpp b/src/input_common/gcadapter/gc_adapter.cpp
index ec3167bea..320f51ee6 100644
--- a/src/input_common/gcadapter/gc_adapter.cpp
+++ b/src/input_common/gcadapter/gc_adapter.cpp
@@ -155,8 +155,12 @@ void Adapter::UpdateStateAxes(std::size_t port, const AdapterPayload& adapter_pa
155 for (const PadAxes axis : axes) { 155 for (const PadAxes axis : axes) {
156 const auto index = static_cast<std::size_t>(axis); 156 const auto index = static_cast<std::size_t>(axis);
157 const u8 axis_value = adapter_payload[offset + 3 + index]; 157 const u8 axis_value = adapter_payload[offset + 3 + index];
158 if (pads[port].axis_origin[index] == 255) { 158 if (pads[port].reset_origin_counter <= 18) {
159 if (pads[port].axis_origin[index] != axis_value) {
160 pads[port].reset_origin_counter = 0;
161 }
159 pads[port].axis_origin[index] = axis_value; 162 pads[port].axis_origin[index] = axis_value;
163 pads[port].reset_origin_counter++;
160 } 164 }
161 pads[port].axis_values[index] = 165 pads[port].axis_values[index] =
162 static_cast<s16>(axis_value - pads[port].axis_origin[index]); 166 static_cast<s16>(axis_value - pads[port].axis_origin[index]);
@@ -375,7 +379,7 @@ void Adapter::ResetDevice(std::size_t port) {
375 pads[port].buttons = 0; 379 pads[port].buttons = 0;
376 pads[port].last_button = PadButton::Undefined; 380 pads[port].last_button = PadButton::Undefined;
377 pads[port].axis_values.fill(0); 381 pads[port].axis_values.fill(0);
378 pads[port].axis_origin.fill(255); 382 pads[port].reset_origin_counter = 0;
379} 383}
380 384
381void Adapter::Reset() { 385void Adapter::Reset() {
diff --git a/src/input_common/gcadapter/gc_adapter.h b/src/input_common/gcadapter/gc_adapter.h
index 7a6c545bd..e5de5e94f 100644
--- a/src/input_common/gcadapter/gc_adapter.h
+++ b/src/input_common/gcadapter/gc_adapter.h
@@ -70,6 +70,7 @@ struct GCController {
70 PadButton last_button{}; 70 PadButton last_button{};
71 std::array<s16, 6> axis_values{}; 71 std::array<s16, 6> axis_values{};
72 std::array<u8, 6> axis_origin{}; 72 std::array<u8, 6> axis_origin{};
73 u8 reset_origin_counter{};
73}; 74};
74 75
75class Adapter { 76class Adapter {