From b750cc21f48c93475dff40bc6e6011938ecbc26f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Thu, 27 Oct 2022 22:53:26 +0000 Subject: [PATCH] PFW-1404 Only create button event when the button is released --- src/modules/buttons.h | 2 ++ src/modules/debouncer.h | 1 + src/modules/user_input.cpp | 6 +++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/modules/buttons.h b/src/modules/buttons.h index a460a6c..c6e5a79 100644 --- a/src/modules/buttons.h +++ b/src/modules/buttons.h @@ -38,6 +38,8 @@ public: /// @param index of the button to check inline bool ButtonPressed(uint8_t index) const { return buttons[index].Pressed(); } + inline bool ButtonReleased(uint8_t index) const { return buttons[index].Released(); } + /// @returns true if any of the button is pressed inline bool AnyButtonPressed() const { for (uint8_t i = 0; i < config::buttonCount; ++i) { diff --git a/src/modules/debouncer.h b/src/modules/debouncer.h index c30e4e5..a5f7946 100644 --- a/src/modules/debouncer.h +++ b/src/modules/debouncer.h @@ -19,6 +19,7 @@ public: /// @returns true if debounced value is currently considered as pressed inline bool Pressed() const { return f.state == State::WaitForRelease; } + inline bool Released() const { return f.state == State::Update; } /// State machine stepping routine void Step(uint16_t time, bool press); diff --git a/src/modules/user_input.cpp b/src/modules/user_input.cpp index a2ed731..4564aac 100644 --- a/src/modules/user_input.cpp +++ b/src/modules/user_input.cpp @@ -8,11 +8,11 @@ namespace user_input { UserInput userInput; void UserInput::Step() { - if (buttons::buttons.ButtonPressed(mb::Left)) + if (buttons::buttons.ButtonReleased(mb::Left)) eventQueue.push(Event::Left); - if (buttons::buttons.ButtonPressed(mb::Middle)) + if (buttons::buttons.ButtonReleased(mb::Middle)) eventQueue.push(Event::Middle); - if (buttons::buttons.ButtonPressed(mb::Right)) + if (buttons::buttons.ButtonReleased(mb::Right)) eventQueue.push(Event::Right); }