diff --git a/examples/companion_radio/Button.cpp b/examples/companion_radio/Button.cpp index ec1f0f69..f9e83dba 100644 --- a/examples/companion_radio/Button.cpp +++ b/examples/companion_radio/Button.cpp @@ -50,9 +50,12 @@ void Button::update() { triggerEvent(SHORT_PRESS); } else if (_clickCount == 2) { triggerEvent(DOUBLE_PRESS); - } else if (_clickCount >= 3) { + } else if (_clickCount == 3) { triggerEvent(TRIPLE_PRESS); + } else if (_clickCount >= 4) { + triggerEvent(QUADRUPLE_PRESS); } + _clickCount = 0; _state = IDLE; } @@ -116,6 +119,9 @@ void Button::triggerEvent(EventType event) { case TRIPLE_PRESS: if (_onTriplePress) _onTriplePress(); break; + case QUADRUPLE_PRESS: + if (_onQuadruplePress) _onQuadruplePress(); + break; case LONG_PRESS: if (_onLongPress) _onLongPress(); break; diff --git a/examples/companion_radio/Button.h b/examples/companion_radio/Button.h index 47c792bd..9df809b2 100644 --- a/examples/companion_radio/Button.h +++ b/examples/companion_radio/Button.h @@ -16,6 +16,7 @@ public: SHORT_PRESS, DOUBLE_PRESS, TRIPLE_PRESS, + QUADRUPLE_PRESS, LONG_PRESS, ANY_PRESS }; @@ -32,6 +33,7 @@ public: void onShortPress(EventCallback callback) { _onShortPress = callback; } void onDoublePress(EventCallback callback) { _onDoublePress = callback; } void onTriplePress(EventCallback callback) { _onTriplePress = callback; } + void onQuadruplePress(EventCallback callback) { _onQuadruplePress = callback; } void onLongPress(EventCallback callback) { _onLongPress = callback; } void onAnyPress(EventCallback callback) { _onAnyPress = callback; } @@ -68,6 +70,7 @@ private: EventCallback _onShortPress = nullptr; EventCallback _onDoublePress = nullptr; EventCallback _onTriplePress = nullptr; + EventCallback _onQuadruplePress = nullptr; EventCallback _onLongPress = nullptr; EventCallback _onAnyPress = nullptr; diff --git a/examples/companion_radio/UITask.cpp b/examples/companion_radio/UITask.cpp index 01906f90..3e477fe9 100644 --- a/examples/companion_radio/UITask.cpp +++ b/examples/companion_radio/UITask.cpp @@ -34,8 +34,9 @@ static const uint8_t meshcore_logo [] PROGMEM = { 0xe3, 0xe3, 0x8f, 0xff, 0x1f, 0xfc, 0x3c, 0x0e, 0x1f, 0xf8, 0xff, 0xf8, 0x70, 0x3c, 0x7f, 0xf8, }; -void UITask::begin(DisplayDriver* display, NodePrefs* node_prefs) { +void UITask::begin(DisplayDriver* display, SensorManager* sensors, NodePrefs* node_prefs) { _display = display; + _sensors = sensors; _auto_off = millis() + AUTO_OFF_MILLIS; clearMsgPreview(); _node_prefs = node_prefs; @@ -72,6 +73,7 @@ void UITask::begin(DisplayDriver* display, NodePrefs* node_prefs) { _userButton->onShortPress([this]() { handleButtonShortPress(); }); _userButton->onDoublePress([this]() { handleButtonDoublePress(); }); _userButton->onTriplePress([this]() { handleButtonTriplePress(); }); + _userButton->onQuadruplePress([this]() { handleButtonQuadruplePress(); }); _userButton->onLongPress([this]() { handleButtonLongPress(); }); _userButton->onAnyPress([this]() { handleButtonAnyPress(); }); #endif @@ -383,6 +385,14 @@ void UITask::handleButtonTriplePress() { #endif } +void UITask::handleButtonQuadruplePress() { + MESH_DEBUG_PRINTLN("UITask: quad press triggered"); + if (_sensors != NULL) { + _sensors->toggleGps(); + } + _need_refresh = true; +} + void UITask::handleButtonLongPress() { MESH_DEBUG_PRINTLN("UITask: long press triggered"); if (millis() - ui_started_at < 8000) { // long press in first 8 seconds since startup -> CLI/rescue diff --git a/examples/companion_radio/UITask.h b/examples/companion_radio/UITask.h index 93a2ef89..664a7659 100644 --- a/examples/companion_radio/UITask.h +++ b/examples/companion_radio/UITask.h @@ -2,6 +2,7 @@ #include #include +#include #include #ifdef PIN_BUZZER @@ -24,6 +25,7 @@ class UITask { DisplayDriver* _display; mesh::MainBoard* _board; + SensorManager* _sensors; #ifdef PIN_BUZZER genericBuzzer buzzer; #endif @@ -53,17 +55,18 @@ class UITask { void handleButtonShortPress(); void handleButtonDoublePress(); void handleButtonTriplePress(); + void handleButtonQuadruplePress(); void handleButtonLongPress(); public: - UITask(mesh::MainBoard* board) : _board(board), _display(NULL) { + UITask(mesh::MainBoard* board) : _board(board), _display(NULL), _sensors(NULL) { _next_refresh = 0; ui_started_at = 0; _connected = false; } - void begin(DisplayDriver* display, NodePrefs* node_prefs); + void begin(DisplayDriver* display, SensorManager* sensors, NodePrefs* node_prefs); void setHasConnection(bool connected) { _connected = connected; } bool hasDisplay() const { return _display != NULL; } diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index b46cdaab..098baf99 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -186,7 +186,7 @@ void setup() { sensors.begin(); #ifdef DISPLAY_CLASS - ui_task.begin(disp, the_mesh.getNodePrefs()); // still want to pass this in as dependency, as prefs might be moved + ui_task.begin(disp, &sensors, the_mesh.getNodePrefs()); // still want to pass this in as dependency, as prefs might be moved #endif } diff --git a/src/helpers/SensorManager.h b/src/helpers/SensorManager.h index 0e4bc27d..6ef1192a 100644 --- a/src/helpers/SensorManager.h +++ b/src/helpers/SensorManager.h @@ -21,4 +21,6 @@ public: virtual const char* getSettingName(int i) const { return NULL; } virtual const char* getSettingValue(int i) const { return NULL; } virtual bool setSettingValue(const char* name, const char* value) { return false; } + virtual bool getGpsStatus() { return false; } + virtual bool toggleGps() { return false; } }; diff --git a/src/helpers/nrf52/T1000eBoard.cpp b/variants/t1000-e/T1000eBoard.cpp similarity index 100% rename from src/helpers/nrf52/T1000eBoard.cpp rename to variants/t1000-e/T1000eBoard.cpp diff --git a/src/helpers/nrf52/T1000eBoard.h b/variants/t1000-e/T1000eBoard.h similarity index 100% rename from src/helpers/nrf52/T1000eBoard.h rename to variants/t1000-e/T1000eBoard.h diff --git a/variants/t1000-e/target.h b/variants/t1000-e/target.h index 1b569481..221db614 100644 --- a/variants/t1000-e/target.h +++ b/variants/t1000-e/target.h @@ -3,7 +3,7 @@ #define RADIOLIB_STATIC_ONLY 1 #include #include -#include +#include "T1000eBoard.h" #include #include #include @@ -28,6 +28,8 @@ public: const char* getSettingName(int i) const override; const char* getSettingValue(int i) const override; bool setSettingValue(const char* name, const char* value) override; + bool getGpsStatus() override { return gps_active; } + bool toggleGps() override { gps_active ? sleep_gps() : start_gps(); return gps_active; } }; #ifdef DISPLAY_CLASS