From 181113ff17294c26deab3c7bdcfd2d03a5ecdd70 Mon Sep 17 00:00:00 2001 From: David Holdeman Date: Mon, 21 Sep 2020 17:25:24 -0500 Subject: [PATCH] Fix debounce (#1814) * 1,2,4,7,9 * 6 * fix type mismatch * change field * comment * Revert "comment" This reverts commit f7ce8ed48d015490ed82d692270198817569b5a3. * Revert "Revert "comment"" This reverts commit 99f2d5cadcbf444bf58acf9e57a6fed61355d5be. * Revert "change field" This reverts commit 55ec050cd947696cdffccae6b29fe48d95ab5f17. * rename var * comments * use func in init * default values * remove redundant check * check * use bool * mark false when done * pointer * check GPIO_UNASSIGNED * wat * merge carnage * oops, accidentally downgraded submodule --- firmware/hw_layer/debounce.cpp | 8 ++++++-- firmware/hw_layer/debounce.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/firmware/hw_layer/debounce.cpp b/firmware/hw_layer/debounce.cpp index 903489d1f1..faed5cab94 100644 --- a/firmware/hw_layer/debounce.cpp +++ b/firmware/hw_layer/debounce.cpp @@ -56,13 +56,17 @@ void ButtonDebounce::stopConfiguration () { #endif /* EFI_ACTIVE_CONFIGURATION_IN_FLASH */ #ifndef EFI_UNIT_TEST brain_pin_markUnused(active_pin); + needsInit = true; #endif /* EFI_UNIT_TEST */ } } void ButtonDebounce::startConfiguration () { #ifndef EFI_UNIT_TEST - efiSetPadMode("Button", *m_pin, getInputMode(*m_mode)); + if (needsInit) { + efiSetPadMode("Button", *m_pin, getInputMode(*m_mode)); + needsInit = false; + } #endif active_pin = *m_pin; active_mode = *m_mode; @@ -77,7 +81,7 @@ bool ButtonDebounce::readPinEvent() { } bool ButtonDebounce::readPinState() { - if (!m_pin) { + if (*m_pin == GPIO_UNASSIGNED) { return false; } efitick_t timeNow = getTimeNowNt(); diff --git a/firmware/hw_layer/debounce.h b/firmware/hw_layer/debounce.h index f9225513d9..dc6adaed31 100644 --- a/firmware/hw_layer/debounce.h +++ b/firmware/hw_layer/debounce.h @@ -33,4 +33,5 @@ private: bool initialized = false; ButtonDebounce *nextDebounce = nullptr; static ButtonDebounce* s_firstDebounce; + bool needsInit = false; };