From 5eeffdb290b1e1f1a35d186066ffaf2cdf76dbfc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 Oct 2025 07:44:54 -0500 Subject: [PATCH 1/2] chore(deps): update meshtastic/device-ui digest to 3fb7c0e (#8291) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 7121f00b7..5b7f5ddcf 100644 --- a/platformio.ini +++ b/platformio.ini @@ -120,7 +120,7 @@ lib_deps = [device-ui_base] lib_deps = # renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master - https://github.com/meshtastic/device-ui/archive/6d8cc228298a1ecd9913aed757187e9527c1facc.zip + https://github.com/meshtastic/device-ui/archive/3fb7c0e28e8e51fc0a7d56facacf3411f1d29fe0.zip ; Common libs for environmental measurements in telemetry module [environmental_base] From 7537d28419d2bd2dc70519889b509cc1994789ff Mon Sep 17 00:00:00 2001 From: l0g-lab <72365840+l0g-lab@users.noreply.github.com> Date: Sun, 12 Oct 2025 09:25:15 -0400 Subject: [PATCH 2/2] Nodelist: choice of long or short name (#7926) * update to use long names for pager * remove duplicate * add menu item * fix after conflict * menu name change. use sanitizeString * fix formatting issue. should pass trunk now. * remove auto-generated protobufs * remove log, add tdeck, improvements. --------- Co-authored-by: l0g-lab Co-authored-by: Tom Fifield Co-authored-by: Ben Meadors --- src/graphics/draw/MenuHandler.cpp | 42 ++++++++++++++++++++++++-- src/graphics/draw/MenuHandler.h | 2 ++ src/graphics/draw/NodeListRenderer.cpp | 32 ++++++++++++-------- 3 files changed, 60 insertions(+), 16 deletions(-) diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index 3e139c0d6..701062e08 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -762,6 +762,31 @@ void menuHandler::nodeListMenu() screen->showOverlayBanner(bannerOptions); } +void menuHandler::nodeNameLengthMenu() +{ + enum OptionsNumbers { Back, Long, Short }; + static const char *optionsArray[] = {"Back", "Long", "Short"}; + BannerOverlayOptions bannerOptions; + bannerOptions.message = "Node Name Length"; + bannerOptions.optionsArrayPtr = optionsArray; + bannerOptions.optionsCount = 3; + bannerOptions.bannerCallback = [](int selected) -> void { + if (selected == Long) { + // Set names to long + LOG_INFO("Setting names to long"); + config.display.use_long_node_name = true; + } else if (selected == Short) { + // Set names to short + LOG_INFO("Setting names to short"); + config.display.use_long_node_name = false; + } else if (selected == Back) { + menuQueue = screen_options_menu; + screen->runNow(); + } + }; + screen->showOverlayBanner(bannerOptions); +} + void menuHandler::resetNodeDBMenu() { static const char *optionsArray[] = {"Back", "Confirm"}; @@ -1304,11 +1329,16 @@ void menuHandler::screenOptionsMenu() hasSupportBrightness = false; #endif - enum optionsNumbers { Back, Brightness, ScreenColor }; - static const char *optionsArray[4] = {"Back"}; - static int optionsEnumArray[4] = {Back}; + enum optionsNumbers { Back, NodeNameLength, Brightness, ScreenColor }; + static const char *optionsArray[5] = {"Back"}; + static int optionsEnumArray[5] = {Back}; int options = 1; +#if defined(T_DECK) || defined(T_LORA_PAGER) + optionsArray[options] = "Show Long/Short Name"; + optionsEnumArray[options++] = NodeNameLength; +#endif + // Only show brightness for B&W displays if (hasSupportBrightness) { optionsArray[options] = "Brightness"; @@ -1333,6 +1363,9 @@ void menuHandler::screenOptionsMenu() } else if (selected == ScreenColor) { menuHandler::menuQueue = menuHandler::tftcolormenupicker; screen->runNow(); + } else if (selected == NodeNameLength) { + menuHandler::menuQueue = menuHandler::node_name_length_menu; + screen->runNow(); } else { menuQueue = system_base_menu; screen->runNow(); @@ -1610,6 +1643,9 @@ void menuHandler::handleMenuSwitch(OLEDDisplay *display) case brightness_picker: BrightnessPickerMenu(); break; + case node_name_length_menu: + nodeNameLengthMenu(); + break; case reboot_menu: rebootMenu(); break; diff --git a/src/graphics/draw/MenuHandler.h b/src/graphics/draw/MenuHandler.h index 47dbb2543..1f7bbac8c 100644 --- a/src/graphics/draw/MenuHandler.h +++ b/src/graphics/draw/MenuHandler.h @@ -43,6 +43,7 @@ class menuHandler key_verification_final_prompt, trace_route_menu, throttle_message, + node_name_length_menu, FrameToggles }; static screenMenus menuQueue; @@ -85,6 +86,7 @@ class menuHandler static void notificationsMenu(); static void screenOptionsMenu(); static void powerMenu(); + static void nodeNameLengthMenu(); static void FrameToggles_menu(); static void textMessageMenu(); diff --git a/src/graphics/draw/NodeListRenderer.cpp b/src/graphics/draw/NodeListRenderer.cpp index 7d6a38dd3..07577db8c 100644 --- a/src/graphics/draw/NodeListRenderer.cpp +++ b/src/graphics/draw/NodeListRenderer.cpp @@ -55,26 +55,32 @@ static int scrollIndex = 0; const char *getSafeNodeName(meshtastic_NodeInfoLite *node) { + const char *name = NULL; static char nodeName[16] = "?"; - if (node->has_user && strlen(node->user.short_name) > 0) { - bool valid = true; - const char *name = node->user.short_name; - for (size_t i = 0; i < strlen(name); i++) { - uint8_t c = (uint8_t)name[i]; - if (c < 32 || c > 126) { - valid = false; - break; - } - } - if (valid) { - strncpy(nodeName, name, sizeof(nodeName) - 1); - nodeName[sizeof(nodeName) - 1] = '\0'; + if (config.display.use_long_node_name == true) { + if (node->has_user && strlen(node->user.long_name) > 0) { + name = node->user.long_name; } else { snprintf(nodeName, sizeof(nodeName), "(%04X)", (uint16_t)(node->num & 0xFFFF)); } + } else { + if (node->has_user && strlen(node->user.short_name) > 0) { + name = node->user.short_name; + } else { + snprintf(nodeName, sizeof(nodeName), "(%04X)", (uint16_t)(node->num & 0xFFFF)); + } + } + + // Use sanitizeString() function and copy directly into nodeName + std::string sanitized_name = sanitizeString(name ? name : ""); + + if (!sanitized_name.empty()) { + strncpy(nodeName, sanitized_name.c_str(), sizeof(nodeName) - 1); + nodeName[sizeof(nodeName) - 1] = '\0'; } else { snprintf(nodeName, sizeof(nodeName), "(%04X)", (uint16_t)(node->num & 0xFFFF)); } + return nodeName; }