mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-25 22:20:27 +00:00
Optimize key event processing and add debounce logic.
This commit is contained in:
parent
195b7cc30a
commit
7a38368494
@ -33,16 +33,25 @@ int32_t UpDownInterruptBase::runOnce()
|
|||||||
{
|
{
|
||||||
InputEvent e;
|
InputEvent e;
|
||||||
e.inputEvent = INPUT_BROKER_NONE;
|
e.inputEvent = INPUT_BROKER_NONE;
|
||||||
|
unsigned long now = millis();
|
||||||
if (this->action == UPDOWN_ACTION_PRESSED) {
|
if (this->action == UPDOWN_ACTION_PRESSED) {
|
||||||
LOG_DEBUG("GPIO event Press");
|
if (now - lastPressKeyTime >= PRESS_DEBOUNCE_MS) {
|
||||||
e.inputEvent = this->_eventPressed;
|
lastPressKeyTime = now;
|
||||||
|
LOG_DEBUG("GPIO event Press");
|
||||||
|
e.inputEvent = this->_eventPressed;
|
||||||
|
}
|
||||||
} else if (this->action == UPDOWN_ACTION_UP) {
|
} else if (this->action == UPDOWN_ACTION_UP) {
|
||||||
LOG_DEBUG("GPIO event Up");
|
if (now - lastUpKeyTime >= UPDOWN_DEBOUNCE_MS) {
|
||||||
e.inputEvent = this->_eventUp;
|
lastUpKeyTime = now;
|
||||||
|
LOG_DEBUG("GPIO event Up");
|
||||||
|
e.inputEvent = this->_eventUp;
|
||||||
|
}
|
||||||
} else if (this->action == UPDOWN_ACTION_DOWN) {
|
} else if (this->action == UPDOWN_ACTION_DOWN) {
|
||||||
LOG_DEBUG("GPIO event Down");
|
if (now - lastDownKeyTime >= UPDOWN_DEBOUNCE_MS) {
|
||||||
e.inputEvent = this->_eventDown;
|
lastDownKeyTime = now;
|
||||||
|
LOG_DEBUG("GPIO event Down");
|
||||||
|
e.inputEvent = this->_eventDown;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.inputEvent != INPUT_BROKER_NONE) {
|
if (e.inputEvent != INPUT_BROKER_NONE) {
|
||||||
@ -52,7 +61,6 @@ int32_t UpDownInterruptBase::runOnce()
|
|||||||
}
|
}
|
||||||
|
|
||||||
this->action = UPDOWN_ACTION_NONE;
|
this->action = UPDOWN_ACTION_NONE;
|
||||||
|
|
||||||
return 100;
|
return 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,4 +27,10 @@ class UpDownInterruptBase : public Observable<const InputEvent *>, public concur
|
|||||||
input_broker_event _eventUp = INPUT_BROKER_NONE;
|
input_broker_event _eventUp = INPUT_BROKER_NONE;
|
||||||
input_broker_event _eventPressed = INPUT_BROKER_NONE;
|
input_broker_event _eventPressed = INPUT_BROKER_NONE;
|
||||||
const char *_originName;
|
const char *_originName;
|
||||||
|
|
||||||
|
unsigned long lastUpKeyTime = 0;
|
||||||
|
unsigned long lastDownKeyTime = 0;
|
||||||
|
unsigned long lastPressKeyTime = 0;
|
||||||
|
const unsigned long UPDOWN_DEBOUNCE_MS = 300;
|
||||||
|
const unsigned long PRESS_DEBOUNCE_MS = 500;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user