diff --git a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuAction.h b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuAction.h index 33e02f12c..b04a8d8b6 100644 --- a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuAction.h +++ b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuAction.h @@ -96,6 +96,11 @@ enum MenuAction { SET_TZ_AU_ACST, SET_TZ_AU_AEST, SET_TZ_PACIFIC_NZ, + // Power + TOGGLE_POWER_SAVE, + // Bluetooth + TOGGLE_BLUETOOTH, + TOGGLE_BLUETOOTH_PAIR_MODE, }; } // namespace NicheGraphics::InkHUD diff --git a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuApplet.cpp b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuApplet.cpp index 48a7f25ec..882c08588 100644 --- a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuApplet.cpp +++ b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuApplet.cpp @@ -366,6 +366,27 @@ void InkHUD::MenuApplet::execute(MenuItem item) rebootAtMsec = millis() + 2000; break; + // Power + case TOGGLE_POWER_SAVE: +#if defined(ARCH_ESP32) + config.power.is_power_saving = !config.power.is_power_saving; + nodeDB->saveToDisk(SEGMENT_CONFIG); + rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000; +#endif + break; + + // Bluetooth + case TOGGLE_BLUETOOTH: + config.bluetooth.enabled = !config.bluetooth.enabled; + nodeDB->saveToDisk(SEGMENT_CONFIG); + rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000; + break; + + case TOGGLE_BLUETOOTH_PAIR_MODE: + config.bluetooth.fixed_pin = !config.bluetooth.fixed_pin; + nodeDB->saveToDisk(SEGMENT_CONFIG); + break; + // Regions case SET_REGION_US: applyLoRaRegion(meshtastic_Config_LoRaConfig_RegionCode_US); @@ -686,6 +707,10 @@ void InkHUD::MenuApplet::showPage(MenuPage page) case NODE_CONFIG: items.push_back(MenuItem("Back", MenuAction::BACK, MenuPage::ROOT)); items.push_back(MenuItem("Device", MenuPage::NODE_CONFIG_DEVICE)); +#if defined(ARCH_ESP32) + items.push_back(MenuItem("Power", MenuPage::NODE_CONFIG_POWER)); +#endif + items.push_back(MenuItem("Bluetooth", MenuPage::NODE_CONFIG_BLUETOOTH)); items.push_back(MenuItem("LoRa", MenuPage::NODE_CONFIG_LORA)); items.push_back(MenuItem("Exit", MenuPage::EXIT)); break; @@ -709,6 +734,31 @@ void InkHUD::MenuApplet::showPage(MenuPage page) break; } +#if defined(ARCH_ESP32) + case NODE_CONFIG_POWER: { + items.push_back(MenuItem("Back", MenuAction::BACK, MenuPage::NODE_CONFIG)); + + const char *psLabel = config.power.is_power_saving ? "Powersave Mode: On" : "Powersave Mode: Off"; + + items.push_back(MenuItem(psLabel, MenuAction::TOGGLE_POWER_SAVE, MenuPage::EXIT)); + items.push_back(MenuItem("Exit", MenuPage::EXIT)); + break; + } +#endif + + case NODE_CONFIG_BLUETOOTH: { + items.push_back(MenuItem("Back", MenuAction::BACK, MenuPage::NODE_CONFIG)); + + const char *btLabel = config.bluetooth.enabled ? "Bluetooth: On" : "Bluetooth: Off"; + items.push_back(MenuItem(btLabel, MenuAction::TOGGLE_BLUETOOTH, MenuPage::EXIT)); + + const char *pairLabel = config.bluetooth.fixed_pin ? "Pair Mode: Fixed" : "Pair Mode: Random"; + items.push_back(MenuItem(pairLabel, MenuAction::TOGGLE_BLUETOOTH_PAIR_MODE, MenuPage::EXIT)); + + items.push_back(MenuItem("Exit", MenuPage::EXIT)); + break; + } + case NODE_CONFIG_LORA: { items.push_back(MenuItem("Back", MenuAction::BACK, MenuPage::NODE_CONFIG)); @@ -806,7 +856,7 @@ void InkHUD::MenuApplet::showPage(MenuPage page) items.push_back(MenuItem("Short Fast", MenuAction::SET_PRESET_SHORT_FAST, MenuPage::EXIT)); items.push_back(MenuItem("Short Turbo", MenuAction::SET_PRESET_SHORT_TURBO, MenuPage::EXIT)); items.push_back(MenuItem("Exit", MenuPage::EXIT)); - break; // explicit: do NOT fall through to EXIT + break; } case EXIT: diff --git a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuPage.h b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuPage.h index 685059998..30d9c79bc 100644 --- a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuPage.h +++ b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuPage.h @@ -25,6 +25,8 @@ enum MenuPage : uint8_t { NODE_CONFIG_PRESET, NODE_CONFIG_DEVICE, NODE_CONFIG_DEVICE_ROLE, + NODE_CONFIG_POWER, + NODE_CONFIG_BLUETOOTH, TIMEZONE, APPLETS, AUTOSHOW,