diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 0690b45ac..4df12f045 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -730,7 +730,7 @@ void UITask::loop() { c = handleLongPress(KEY_RIGHT); } ev = back_btn.check(); - if (ev == BUTTON_EVENT_TRIPLE_CLICK) { + if (ev == BUTTON_EVENT_TRIPLE_CLICK || ev == BUTTON_EVENT_QUAD_CLICK) { // Until we have a need for Quad Click here, we treat is as a Triple Click c = handleTripleClick(KEY_SELECT); } #elif defined(PIN_USER_BTN) @@ -743,6 +743,8 @@ void UITask::loop() { c = handleDoubleClick(KEY_PREV); } else if (ev == BUTTON_EVENT_TRIPLE_CLICK) { c = handleTripleClick(KEY_SELECT); + } else if (ev == BUTTON_EVENT_QUAD_CLICK) { + c = handleQuadClick(KEY_SELECT); } #endif #if defined(PIN_USER_BTN_ANA) @@ -754,7 +756,7 @@ void UITask::loop() { c = handleLongPress(KEY_ENTER); } else if (ev == BUTTON_EVENT_DOUBLE_CLICK) { c = handleDoubleClick(KEY_PREV); - } else if (ev == BUTTON_EVENT_TRIPLE_CLICK) { + } else if (ev == BUTTON_EVENT_TRIPLE_CLICK || ev == BUTTON_EVENT_QUAD_CLICK) { // Until we have a need for Quad Click here, we treat is as a Triple Click c = handleTripleClick(KEY_SELECT); } _analogue_pin_read_millis = millis(); @@ -762,11 +764,11 @@ void UITask::loop() { #endif #if defined(BACKLIGHT_BTN) if (millis() > next_backlight_btn_check) { - bool touch_state = digitalRead(PIN_BUTTON2); + bool touch_state = digitalRead(BACKLIGHT_BTN); #if defined(DISP_BACKLIGHT) - digitalWrite(DISP_BACKLIGHT, !touch_state); + digitalWrite(DISP_BACKLIGHT, _forceBacklight || !touch_state); #elif defined(EXP_PIN_BACKLIGHT) - expander.digitalWrite(EXP_PIN_BACKLIGHT, !touch_state); + expander.digitalWrite(EXP_PIN_BACKLIGHT, _forceBacklight || !touch_state); #endif next_backlight_btn_check = millis() + 300; } @@ -876,6 +878,14 @@ char UITask::handleTripleClick(char c) { return c; } +char UITask::handleQuadClick(char c) { + MESH_DEBUG_PRINTLN("UITask: quad click triggered"); + checkDisplayOn(c); + toggleBacklight(); + c = 0; + return c; +} + bool UITask::getGPSState() { if (_sensors != NULL) { int num = _sensors->getNumSettings(); @@ -925,5 +935,18 @@ void UITask::toggleBuzzer() { the_mesh.savePrefs(); showAlert(buzzer.isQuiet() ? "Buzzer: OFF" : "Buzzer: ON", 800); _next_refresh = 0; // trigger refresh + #else + showAlert("Buzzer N/A", 800); + #endif +} + +void UITask::toggleBacklight() { + // Toggle forced backlight mode + #if defined(DISP_BACKLIGHT) || defined(EXP_PIN_BACKLIGHT) + _forceBacklight = !_forceBacklight; + showAlert(_forceBacklight ? "Backlight: ALWAYS" : "Backlight: BUTTON ", 800); + _next_refresh = 0; // trigger refresh + #else + showAlert("Backlight N/A", 800); #endif } diff --git a/examples/companion_radio/ui-new/UITask.h b/examples/companion_radio/ui-new/UITask.h index 02c3cafbd..b0bb07b7e 100644 --- a/examples/companion_radio/ui-new/UITask.h +++ b/examples/companion_radio/ui-new/UITask.h @@ -37,6 +37,7 @@ class UITask : public AbstractUITask { unsigned long _alert_expiry; int _msgcount; unsigned long ui_started_at, next_batt_chck; + bool _forceBacklight = false; int next_backlight_btn_check = 0; #ifdef PIN_STATUS_LED int led_state = 0; @@ -60,6 +61,7 @@ class UITask : public AbstractUITask { char handleLongPress(char c); char handleDoubleClick(char c); char handleTripleClick(char c); + char handleQuadClick(char c); void setCurrScreen(UIScreen* c); @@ -78,6 +80,7 @@ class UITask : public AbstractUITask { bool hasDisplay() const { return _display != NULL; } bool isButtonPressed() const; + void toggleBacklight(); void toggleBuzzer(); bool getGPSState(); void toggleGPS(); diff --git a/src/helpers/ui/MomentaryButton.cpp b/src/helpers/ui/MomentaryButton.cpp index 9d01e5b01..4e4f96c46 100644 --- a/src/helpers/ui/MomentaryButton.cpp +++ b/src/helpers/ui/MomentaryButton.cpp @@ -131,9 +131,12 @@ int MomentaryButton::check(bool repeat_click) { case 3: event = BUTTON_EVENT_TRIPLE_CLICK; break; + case 4: + event = BUTTON_EVENT_QUAD_CLICK; + break; default: - // For 4+ clicks, treat as triple click? - event = BUTTON_EVENT_TRIPLE_CLICK; + // For 4+ clicks, treat as quad click? + event = BUTTON_EVENT_QUAD_CLICK; break; } _click_count = 0; diff --git a/src/helpers/ui/MomentaryButton.h b/src/helpers/ui/MomentaryButton.h index 358a343b0..37933eb9a 100644 --- a/src/helpers/ui/MomentaryButton.h +++ b/src/helpers/ui/MomentaryButton.h @@ -7,6 +7,7 @@ #define BUTTON_EVENT_LONG_PRESS 2 #define BUTTON_EVENT_DOUBLE_CLICK 3 #define BUTTON_EVENT_TRIPLE_CLICK 4 +#define BUTTON_EVENT_QUAD_CLICK 5 class MomentaryButton { int8_t _pin;