From 2281293ef6b4cbb96c6b5936761446bdc82eecff Mon Sep 17 00:00:00 2001 From: Paxy Date: Mon, 21 Jul 2025 12:07:10 +0200 Subject: [PATCH 1/2] Added LostAndFound menu item that triggers LostAndFound mode. --- src/graphics/draw/MenuHandler.cpp | 7 ++++++- src/input/InputBroker.h | 1 + src/modules/SystemCommandsModule.cpp | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index 83198a7c5..e0f92757e 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -288,7 +288,7 @@ void menuHandler::messageResponseMenu() void menuHandler::homeBaseMenu() { - enum optionsNumbers { Back, Backlight, Position, Preset, Freetext, Bluetooth, Sleep, enumEnd }; + enum optionsNumbers { Back, Backlight, Position, Preset, Freetext, Lost, Bluetooth, Sleep, enumEnd }; static const char *optionsArray[enumEnd] = {"Back"}; static int optionsEnumArray[enumEnd] = {Back}; @@ -310,6 +310,8 @@ void menuHandler::homeBaseMenu() optionsArray[options] = "New Freetext Msg"; optionsEnumArray[options++] = Freetext; } + optionsArray[options] = "LostAndFound"; + optionsEnumArray[options++] = Lost; optionsArray[options] = "Bluetooth Toggle"; optionsEnumArray[options++] = Bluetooth; @@ -339,6 +341,9 @@ void menuHandler::homeBaseMenu() } else if (selected == Bluetooth) { menuQueue = bluetooth_toggle_menu; screen->runNow(); + } else if (selected == Lost) { + InputEvent event = {.inputEvent = (input_broker_event)INPUT_BROKER_LOST_TOGGLE, .kbchar = INPUT_BROKER_LOST_TOGGLE, .touchX = 0, .touchY = 0}; + inputBroker->injectInputEvent(&event); } }; screen->showOverlayBanner(bannerOptions); diff --git a/src/input/InputBroker.h b/src/input/InputBroker.h index 4487fa662..596c7d664 100644 --- a/src/input/InputBroker.h +++ b/src/input/InputBroker.h @@ -27,6 +27,7 @@ enum input_broker_event { #define INPUT_BROKER_MSG_MUTE_TOGGLE 0xac #define INPUT_BROKER_MSG_FN_SYMBOL_ON 0xf1 #define INPUT_BROKER_MSG_FN_SYMBOL_OFF 0xf2 +#define INPUT_BROKER_LOST_TOGGLE 0xa1 #define INPUT_BROKER_MSG_BLUETOOTH_TOGGLE 0xAA #define INPUT_BROKER_MSG_TAB 0x09 #define INPUT_BROKER_MSG_EMOTE_LIST 0x8F diff --git a/src/modules/SystemCommandsModule.cpp b/src/modules/SystemCommandsModule.cpp index 2d534bd67..030f8634c 100644 --- a/src/modules/SystemCommandsModule.cpp +++ b/src/modules/SystemCommandsModule.cpp @@ -74,6 +74,26 @@ int SystemCommandsModule::handleInputEvent(const InputEvent *event) } #endif return 0; + case INPUT_BROKER_LOST_TOGGLE: + LOG_WARN("Lost Toggle"); +#if !MESHTASTIC_EXCLUDE_GPS + if (gps) { + LOG_WARN("GPS present"); + if (config.device.role == meshtastic_Config_DeviceConfig_Role_CLIENT) { + LOG_WARN("Changing mode to LOST_AND_FOUND"); + config.device.role = meshtastic_Config_DeviceConfig_Role_LOST_AND_FOUND; + IF_SCREEN(screen->forceDisplay(); screen->showSimpleBanner("Switching to LOST!", 3000);) + nodeDB->saveToDisk(SEGMENT_CONFIG); + } else { + LOG_WARN("Changing mode to Client"); + config.device.role = meshtastic_Config_DeviceConfig_Role_CLIENT; + IF_SCREEN(screen->forceDisplay(); screen->showSimpleBanner("Switching to Client!", 3000);) + nodeDB->saveToDisk(SEGMENT_CONFIG); + } + rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000; + } +#endif + return true; case INPUT_BROKER_MSG_REBOOT: IF_SCREEN(screen->showSimpleBanner("Rebooting...", 0)); nodeDB->saveToDisk(); From 031aec6ae4e85d28ee0a9afed5c4c905344fb1b7 Mon Sep 17 00:00:00 2001 From: Paxy Date: Thu, 24 Jul 2025 18:34:07 +0200 Subject: [PATCH 2/2] Update SystemCommandsModule.cpp Removed GPS checking --- src/modules/SystemCommandsModule.cpp | 29 ++++++++++++---------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/src/modules/SystemCommandsModule.cpp b/src/modules/SystemCommandsModule.cpp index 030f8634c..94bb6a433 100644 --- a/src/modules/SystemCommandsModule.cpp +++ b/src/modules/SystemCommandsModule.cpp @@ -76,23 +76,18 @@ int SystemCommandsModule::handleInputEvent(const InputEvent *event) return 0; case INPUT_BROKER_LOST_TOGGLE: LOG_WARN("Lost Toggle"); -#if !MESHTASTIC_EXCLUDE_GPS - if (gps) { - LOG_WARN("GPS present"); - if (config.device.role == meshtastic_Config_DeviceConfig_Role_CLIENT) { - LOG_WARN("Changing mode to LOST_AND_FOUND"); - config.device.role = meshtastic_Config_DeviceConfig_Role_LOST_AND_FOUND; - IF_SCREEN(screen->forceDisplay(); screen->showSimpleBanner("Switching to LOST!", 3000);) - nodeDB->saveToDisk(SEGMENT_CONFIG); - } else { - LOG_WARN("Changing mode to Client"); - config.device.role = meshtastic_Config_DeviceConfig_Role_CLIENT; - IF_SCREEN(screen->forceDisplay(); screen->showSimpleBanner("Switching to Client!", 3000);) - nodeDB->saveToDisk(SEGMENT_CONFIG); - } - rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000; - } -#endif + if (config.device.role == meshtastic_Config_DeviceConfig_Role_CLIENT) { + LOG_WARN("Changing mode to LOST_AND_FOUND"); + config.device.role = meshtastic_Config_DeviceConfig_Role_LOST_AND_FOUND; + IF_SCREEN(screen->forceDisplay(); screen->showSimpleBanner("Switching to LOST!", 3000);) + nodeDB->saveToDisk(SEGMENT_CONFIG); + } else { + LOG_WARN("Changing mode to Client"); + config.device.role = meshtastic_Config_DeviceConfig_Role_CLIENT; + IF_SCREEN(screen->forceDisplay(); screen->showSimpleBanner("Switching to Client!", 3000);) + nodeDB->saveToDisk(SEGMENT_CONFIG); + } + rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000; return true; case INPUT_BROKER_MSG_REBOOT: IF_SCREEN(screen->showSimpleBanner("Rebooting...", 0));