From 7945f102dc330641d00227a68e3031b23e829465 Mon Sep 17 00:00:00 2001 From: Exzap <13877693+Exzap@users.noreply.github.com> Date: Thu, 27 Aug 2026 20:34:53 +0200 Subject: [PATCH] input+kpad: Avoid overwriting values before use --- src/input/api/Controller.cpp | 7 ++++--- src/input/emulated/VPADController.cpp | 11 ++++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/input/api/Controller.cpp b/src/input/api/Controller.cpp index a2280e9a..b913a497 100644 --- a/src/input/api/Controller.cpp +++ b/src/input/api/Controller.cpp @@ -30,9 +30,10 @@ const ControllerState& ControllerBase::update_state() // ignore default buttons result.buttons.UnsetButtons(m_default_state.buttons); // apply deadzone and range and ignore default axis values - apply_axis_setting(result.axis, m_default_state.axis, m_settings.axis); - apply_axis_setting(result.rotation, m_default_state.rotation, m_settings.rotation); - apply_axis_setting(result.trigger, m_default_state.trigger, m_settings.trigger); + auto settings = get_settings(); + apply_axis_setting(result.axis, m_default_state.axis, settings.axis); + apply_axis_setting(result.rotation, m_default_state.rotation, settings.rotation); + apply_axis_setting(result.trigger, m_default_state.trigger, settings.trigger); apply_axis_button(result.buttons, result.axis, kAxisXP); apply_axis_button(result.buttons, result.rotation, kRotationXP); diff --git a/src/input/emulated/VPADController.cpp b/src/input/emulated/VPADController.cpp index f7e9447a..a791c5fe 100644 --- a/src/input/emulated/VPADController.cpp +++ b/src/input/emulated/VPADController.cpp @@ -112,14 +112,15 @@ void VPADController::VPADRead(VPADStatus_t& status, const BtnRepeat& repeat) // button repeat const auto now = std::chrono::high_resolution_clock::now(); - if (status.hold != m_last_holdvalue) + uint32 currentHold = status.hold; + if (currentHold != m_last_holdvalue) { m_last_hold_change = m_last_pulse = now; } if (repeat.pulse > 0) { - if (m_last_hold_change + std::chrono::milliseconds(repeat.delay) >= now) + if (currentHold != 0 && m_last_hold_change + std::chrono::milliseconds(repeat.delay) <= now) { if ((m_last_pulse + std::chrono::milliseconds(repeat.pulse)) < now) { @@ -130,9 +131,9 @@ void VPADController::VPADRead(VPADStatus_t& status, const BtnRepeat& repeat) } // general - status.release = m_last_holdvalue & ~status.hold; - status.trig = ~m_last_holdvalue & status.hold; - m_last_holdvalue = status.hold; + status.release = m_last_holdvalue & ~currentHold; + status.trig = ~m_last_holdvalue & currentHold; + m_last_holdvalue = currentHold; // touch update_touch(status);