diff --git a/src/ButtonThread.cpp b/src/ButtonThread.cpp index c9b4be8a7..991f55cdb 100644 --- a/src/ButtonThread.cpp +++ b/src/ButtonThread.cpp @@ -237,14 +237,21 @@ int32_t ButtonThread::runOnce() LOG_BUTTON("Mulitipress! %hux", multipressClickCount); switch (multipressClickCount) { #if HAS_GPS && !defined(ELECROW_ThinkNode_M1) - // 3 clicks: toggle GPS - case 3: - if (!config.device.disable_triple_click && (gps != nullptr)) { - gps->toggleGpsMode(); - if (screen) - screen->forceDisplay(true); // Force a new UI frame, then force an EInk update + // 3 clicks: toggle GPS + case 3: + if (!config.device.disable_triple_click && (gps != nullptr)) { + gps->toggleGpsMode(); + + const char* statusMsg = (config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED) + ? "GPS Enabled" + : "GPS Disabled"; + + if (screen) { + screen->forceDisplay(true); // Force a new UI frame, then force an EInk update + screen->showOverlayBanner(statusMsg, 3000); } - break; + } + break; #elif defined(ELECROW_ThinkNode_M1) || defined(ELECROW_ThinkNode_M2) case 3: LOG_INFO("3 clicks: toggle buzzer"); diff --git a/src/modules/CannedMessageModule.cpp b/src/modules/CannedMessageModule.cpp index 4246f000c..b9d616c3a 100644 --- a/src/modules/CannedMessageModule.cpp +++ b/src/modules/CannedMessageModule.cpp @@ -510,17 +510,19 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event) break; case INPUT_BROKER_MSG_GPS_TOGGLE: - #if !MESHTASTIC_EXCLUDE_GPS +#if !MESHTASTIC_EXCLUDE_GPS if (gps != nullptr) { gps->toggleGpsMode(); + const char* statusMsg = (config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED) + ? "GPS Enabled" + : "GPS Disabled"; + if (screen) { + screen->forceDisplay(); + screen->showOverlayBanner(statusMsg, 3000); + } } - if (screen) { - screen->forceDisplay(); - screen->showOverlayBanner("GPS Toggled", 3000); - } - #endif +#endif break; - case INPUT_BROKER_MSG_BLUETOOTH_TOGGLE: if (config.bluetooth.enabled == true) { config.bluetooth.enabled = false; @@ -544,6 +546,21 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event) if (screen) screen->showOverlayBanner("Node Info\nUpdate Sent", 3000); } break; + case INPUT_BROKER_MSG_SHUTDOWN: + if (screen) + screen->showOverlayBanner("Shutting down..."); + shutdownAtMsec = millis() + DEFAULT_SHUTDOWN_SECONDS * 1000; + this->runState = CANNED_MESSAGE_RUN_STATE_INACTIVE; + validEvent = true; + break; + + case INPUT_BROKER_MSG_REBOOT: + if (screen) + screen->showOverlayBanner("Rebooting...", 0); // stays on screen + rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000; + this->runState = CANNED_MESSAGE_RUN_STATE_INACTIVE; + validEvent = true; + break; case INPUT_BROKER_MSG_DISMISS_FRAME: // fn+del: dismiss screen frames like text or waypoint // Avoid opening the canned message screen frame // We're only handling the keypress here by convention, this has nothing to do with canned messages @@ -899,19 +916,6 @@ int32_t CannedMessageModule::runOnce() case INPUT_BROKER_MSG_RIGHT: // already handled above break; - // handle fn+s for shutdown - case INPUT_BROKER_MSG_SHUTDOWN: - if (screen) - shutdownAtMsec = millis() + DEFAULT_SHUTDOWN_SECONDS * 1000; - runState = CANNED_MESSAGE_RUN_STATE_INACTIVE; - break; - // and fn+r for reboot - case INPUT_BROKER_MSG_REBOOT: - if (screen) - screen->showOverlayBanner("Rebooting...", 0); // stays on screen - rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000; - runState = CANNED_MESSAGE_RUN_STATE_INACTIVE; - break; default: if (this->highlight != 0x00) { break;