From bec732046a8ef409ec7fe11f6c39167bf3ddd344 Mon Sep 17 00:00:00 2001 From: Ted Schundler Date: Sat, 12 Jul 2025 17:01:41 -0700 Subject: [PATCH] Add bearings screen into the carousel of rotated screens --- src/graphics/draw/NodeListRenderer.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/graphics/draw/NodeListRenderer.cpp b/src/graphics/draw/NodeListRenderer.cpp index e1c67cc79..62954a764 100644 --- a/src/graphics/draw/NodeListRenderer.cpp +++ b/src/graphics/draw/NodeListRenderer.cpp @@ -544,7 +544,31 @@ void drawDynamicNodeListScreen(OLEDDisplay *display, OLEDDisplayUiState *state, // Render screen based on currentMode const char *title = getCurrentModeTitle(display->getWidth()); - drawNodeListScreen(display, state, x, y, title, drawEntryDynamic); + + if (currentMode == MODE_BEARING) { + float heading = 0; + bool validHeading = false; + auto ourNode = nodeDB->getMeshNode(nodeDB->getNodeNum()); + double lat = DegD(ourNode->position.latitude_i); + double lon = DegD(ourNode->position.longitude_i); + + if (uiconfig.compass_mode != meshtastic_CompassMode_FREEZE_HEADING) { + if (screen->hasHeading()) { + heading = screen->getHeading(); // degrees + validHeading = true; + } else { + heading = screen->estimatedHeading(lat, lon); + validHeading = !isnan(heading); + } + if (!validHeading) { + lastRenderedMode = MODE_COUNT; + return; + } + } + drawNodeListScreen(display, state, x, y, title, drawEntryCompass, drawCompassArrow, heading, lat, lon); + } else { + drawNodeListScreen(display, state, x, y, title, drawEntryDynamic); + } // Track the last mode to avoid reinitializing modeStartTime lastRenderedMode = currentMode;