diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index cf19c4825..786589f33 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -294,7 +294,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}; @@ -316,6 +316,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; @@ -345,6 +347,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 74b9678f4..0fad6f359 100644 --- a/src/modules/SystemCommandsModule.cpp +++ b/src/modules/SystemCommandsModule.cpp @@ -74,6 +74,21 @@ int SystemCommandsModule::handleInputEvent(const InputEvent *event) } #endif return 0; + case INPUT_BROKER_LOST_TOGGLE: + LOG_WARN("Lost Toggle"); + 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)); nodeDB->saveToDisk();