mirror of
https://github.com/meshtastic/firmware.git
synced 2025-09-22 17:34:25 +00:00
Update Protobuf usage, add MLS, fix clock (#8041)
This commit is contained in:
parent
8095261dfd
commit
f32e06a321
@ -2,6 +2,7 @@
|
|||||||
#if HAS_SCREEN
|
#if HAS_SCREEN
|
||||||
#include "ClockRenderer.h"
|
#include "ClockRenderer.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
|
#include "UIRenderer.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "gps/GeoCoord.h"
|
#include "gps/GeoCoord.h"
|
||||||
#include "gps/RTC.h"
|
#include "gps/RTC.h"
|
||||||
@ -300,15 +301,6 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1
|
|||||||
display->drawString(startingHourMinuteTextX + timeStringWidth - xOffset, (display->getHeight() - hourMinuteTextY) - yOffset,
|
display->drawString(startingHourMinuteTextX + timeStringWidth - xOffset, (display->getHeight() - hourMinuteTextY) - yOffset,
|
||||||
secondString);
|
secondString);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Display GPS derived date
|
|
||||||
char datetimeStr[25];
|
|
||||||
UIRenderer::formatDateTime(datetimeStr, sizeof(datetimeStr), rtc_sec, display, false);
|
|
||||||
char fullLine[40];
|
|
||||||
snprintf(fullLine, sizeof(fullLine), "%s", datetimeStr);
|
|
||||||
yOffset = (isHighResolution) ? 12 : 1;
|
|
||||||
display->drawString(startingHourMinuteTextX + timeStringWidth - display->getStringWidth(fullLine),
|
|
||||||
getTextPositions(display)[line] + yOffset, fullLine);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawBluetoothConnectedIcon(OLEDDisplay *display, int16_t x, int16_t y)
|
void drawBluetoothConnectedIcon(OLEDDisplay *display, int16_t x, int16_t y)
|
||||||
@ -522,19 +514,6 @@ void drawAnalogClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
|
|||||||
// draw second hand
|
// draw second hand
|
||||||
display->drawLine(centerX, centerY, secondX, secondY);
|
display->drawLine(centerX, centerY, secondX, secondY);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
display->setFont(FONT_SMALL);
|
|
||||||
// Display GPS derived date
|
|
||||||
char datetimeStr[25];
|
|
||||||
UIRenderer::formatDateTime(datetimeStr, sizeof(datetimeStr), rtc_sec, display, false);
|
|
||||||
char fullLine[40];
|
|
||||||
if (isHighResolution) {
|
|
||||||
snprintf(fullLine, sizeof(fullLine), "%s", datetimeStr);
|
|
||||||
} else {
|
|
||||||
snprintf(fullLine, sizeof(fullLine), "%s", &datetimeStr[2]);
|
|
||||||
}
|
|
||||||
display->drawString(display->getWidth() - 1 - display->getStringWidth(fullLine), getTextPositions(display)[line],
|
|
||||||
fullLine);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -330,8 +330,7 @@ void drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t
|
|||||||
#if HAS_GPS
|
#if HAS_GPS
|
||||||
if (config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED) {
|
if (config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED) {
|
||||||
// Line 3
|
// Line 3
|
||||||
if (config.display.gps_format !=
|
if (uiconfig.gps_format != meshtastic_DeviceUIConfig_GpsCoordinateFormat_DMS) // if DMS then don't draw altitude
|
||||||
meshtastic_Config_DisplayConfig_GpsCoordinateFormat_DMS) // if DMS then don't draw altitude
|
|
||||||
UIRenderer::drawGpsAltitude(display, x, y + FONT_HEIGHT_SMALL * 2, gpsStatus);
|
UIRenderer::drawGpsAltitude(display, x, y + FONT_HEIGHT_SMALL * 2, gpsStatus);
|
||||||
|
|
||||||
// Line 4
|
// Line 4
|
||||||
|
@ -791,36 +791,40 @@ void menuHandler::GPSFormatMenu()
|
|||||||
isHighResolution ? "Universal Transverse Mercator" : "UTM",
|
isHighResolution ? "Universal Transverse Mercator" : "UTM",
|
||||||
isHighResolution ? "Military Grid Reference System" : "MGRS",
|
isHighResolution ? "Military Grid Reference System" : "MGRS",
|
||||||
isHighResolution ? "Open Location Code" : "OLC",
|
isHighResolution ? "Open Location Code" : "OLC",
|
||||||
isHighResolution ? "Ordnance Survey Grid Ref" : "OSGR"};
|
isHighResolution ? "Ordnance Survey Grid Ref" : "OSGR",
|
||||||
|
isHighResolution ? "Maidenhead Locator" : "MLS"};
|
||||||
BannerOverlayOptions bannerOptions;
|
BannerOverlayOptions bannerOptions;
|
||||||
bannerOptions.message = "GPS Format";
|
bannerOptions.message = "GPS Format";
|
||||||
bannerOptions.optionsArrayPtr = optionsArray;
|
bannerOptions.optionsArrayPtr = optionsArray;
|
||||||
bannerOptions.optionsCount = 7;
|
bannerOptions.optionsCount = 8;
|
||||||
bannerOptions.bannerCallback = [](int selected) -> void {
|
bannerOptions.bannerCallback = [](int selected) -> void {
|
||||||
if (selected == 1) {
|
if (selected == 1) {
|
||||||
config.display.gps_format = meshtastic_Config_DisplayConfig_GpsCoordinateFormat_DEC;
|
uiconfig.gps_format = meshtastic_DeviceUIConfig_GpsCoordinateFormat_DEC;
|
||||||
service->reloadConfig(SEGMENT_CONFIG);
|
service->reloadConfig(SEGMENT_CONFIG);
|
||||||
} else if (selected == 2) {
|
} else if (selected == 2) {
|
||||||
config.display.gps_format = meshtastic_Config_DisplayConfig_GpsCoordinateFormat_DMS;
|
uiconfig.gps_format = meshtastic_DeviceUIConfig_GpsCoordinateFormat_DMS;
|
||||||
service->reloadConfig(SEGMENT_CONFIG);
|
service->reloadConfig(SEGMENT_CONFIG);
|
||||||
} else if (selected == 3) {
|
} else if (selected == 3) {
|
||||||
config.display.gps_format = meshtastic_Config_DisplayConfig_GpsCoordinateFormat_UTM;
|
uiconfig.gps_format = meshtastic_DeviceUIConfig_GpsCoordinateFormat_UTM;
|
||||||
service->reloadConfig(SEGMENT_CONFIG);
|
service->reloadConfig(SEGMENT_CONFIG);
|
||||||
} else if (selected == 4) {
|
} else if (selected == 4) {
|
||||||
config.display.gps_format = meshtastic_Config_DisplayConfig_GpsCoordinateFormat_MGRS;
|
uiconfig.gps_format = meshtastic_DeviceUIConfig_GpsCoordinateFormat_MGRS;
|
||||||
service->reloadConfig(SEGMENT_CONFIG);
|
service->reloadConfig(SEGMENT_CONFIG);
|
||||||
} else if (selected == 5) {
|
} else if (selected == 5) {
|
||||||
config.display.gps_format = meshtastic_Config_DisplayConfig_GpsCoordinateFormat_OLC;
|
uiconfig.gps_format = meshtastic_DeviceUIConfig_GpsCoordinateFormat_OLC;
|
||||||
service->reloadConfig(SEGMENT_CONFIG);
|
service->reloadConfig(SEGMENT_CONFIG);
|
||||||
} else if (selected == 6) {
|
} else if (selected == 6) {
|
||||||
config.display.gps_format = meshtastic_Config_DisplayConfig_GpsCoordinateFormat_OSGR;
|
uiconfig.gps_format = meshtastic_DeviceUIConfig_GpsCoordinateFormat_OSGR;
|
||||||
|
service->reloadConfig(SEGMENT_CONFIG);
|
||||||
|
} else if (selected == 7) {
|
||||||
|
uiconfig.gps_format = meshtastic_DeviceUIConfig_GpsCoordinateFormat_MLS;
|
||||||
service->reloadConfig(SEGMENT_CONFIG);
|
service->reloadConfig(SEGMENT_CONFIG);
|
||||||
} else {
|
} else {
|
||||||
menuQueue = position_base_menu;
|
menuQueue = position_base_menu;
|
||||||
screen->runNow();
|
screen->runNow();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
bannerOptions.InitialSelected = config.display.gps_format + 1;
|
bannerOptions.InitialSelected = uiconfig.gps_format + 1;
|
||||||
screen->showOverlayBanner(bannerOptions);
|
screen->showOverlayBanner(bannerOptions);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -119,7 +119,7 @@ void UIRenderer::drawGpsAltitude(OLEDDisplay *display, int16_t x, int16_t y, con
|
|||||||
void UIRenderer::drawGpsCoordinates(OLEDDisplay *display, int16_t x, int16_t y, const meshtastic::GPSStatus *gps,
|
void UIRenderer::drawGpsCoordinates(OLEDDisplay *display, int16_t x, int16_t y, const meshtastic::GPSStatus *gps,
|
||||||
const char *mode)
|
const char *mode)
|
||||||
{
|
{
|
||||||
auto gpsFormat = config.display.gps_format;
|
auto gpsFormat = uiconfig.gps_format;
|
||||||
char displayLine[32];
|
char displayLine[32];
|
||||||
|
|
||||||
if (!gps->getIsConnected() && !config.position.fixed_position) {
|
if (!gps->getIsConnected() && !config.position.fixed_position) {
|
||||||
@ -132,25 +132,25 @@ void UIRenderer::drawGpsCoordinates(OLEDDisplay *display, int16_t x, int16_t y,
|
|||||||
|
|
||||||
geoCoord.updateCoords(int32_t(gps->getLatitude()), int32_t(gps->getLongitude()), int32_t(gps->getAltitude()));
|
geoCoord.updateCoords(int32_t(gps->getLatitude()), int32_t(gps->getLongitude()), int32_t(gps->getAltitude()));
|
||||||
|
|
||||||
if (gpsFormat != meshtastic_Config_DisplayConfig_GpsCoordinateFormat_DMS) {
|
if (gpsFormat != meshtastic_DeviceUIConfig_GpsCoordinateFormat_DMS) {
|
||||||
char coordinateLine_1[22];
|
char coordinateLine_1[22];
|
||||||
char coordinateLine_2[22];
|
char coordinateLine_2[22];
|
||||||
if (gpsFormat == meshtastic_Config_DisplayConfig_GpsCoordinateFormat_DEC) { // Decimal Degrees
|
if (gpsFormat == meshtastic_DeviceUIConfig_GpsCoordinateFormat_DEC) { // Decimal Degrees
|
||||||
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "Lat: %f", geoCoord.getLatitude() * 1e-7);
|
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "Lat: %f", geoCoord.getLatitude() * 1e-7);
|
||||||
snprintf(coordinateLine_2, sizeof(coordinateLine_2), "Lon: %f", geoCoord.getLongitude() * 1e-7);
|
snprintf(coordinateLine_2, sizeof(coordinateLine_2), "Lon: %f", geoCoord.getLongitude() * 1e-7);
|
||||||
} else if (gpsFormat == meshtastic_Config_DisplayConfig_GpsCoordinateFormat_UTM) { // Universal Transverse Mercator
|
} else if (gpsFormat == meshtastic_DeviceUIConfig_GpsCoordinateFormat_UTM) { // Universal Transverse Mercator
|
||||||
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "%2i%1c %06u E", geoCoord.getUTMZone(),
|
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "%2i%1c %06u E", geoCoord.getUTMZone(),
|
||||||
geoCoord.getUTMBand(), geoCoord.getUTMEasting());
|
geoCoord.getUTMBand(), geoCoord.getUTMEasting());
|
||||||
snprintf(coordinateLine_2, sizeof(coordinateLine_2), "%07u N", geoCoord.getUTMNorthing());
|
snprintf(coordinateLine_2, sizeof(coordinateLine_2), "%07u N", geoCoord.getUTMNorthing());
|
||||||
} else if (gpsFormat == meshtastic_Config_DisplayConfig_GpsCoordinateFormat_MGRS) { // Military Grid Reference System
|
} else if (gpsFormat == meshtastic_DeviceUIConfig_GpsCoordinateFormat_MGRS) { // Military Grid Reference System
|
||||||
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "%2i%1c %1c%1c", geoCoord.getMGRSZone(),
|
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "%2i%1c %1c%1c", geoCoord.getMGRSZone(),
|
||||||
geoCoord.getMGRSBand(), geoCoord.getMGRSEast100k(), geoCoord.getMGRSNorth100k());
|
geoCoord.getMGRSBand(), geoCoord.getMGRSEast100k(), geoCoord.getMGRSNorth100k());
|
||||||
snprintf(coordinateLine_2, sizeof(coordinateLine_2), "%05u E %05u N", geoCoord.getMGRSEasting(),
|
snprintf(coordinateLine_2, sizeof(coordinateLine_2), "%05u E %05u N", geoCoord.getMGRSEasting(),
|
||||||
geoCoord.getMGRSNorthing());
|
geoCoord.getMGRSNorthing());
|
||||||
} else if (gpsFormat == meshtastic_Config_DisplayConfig_GpsCoordinateFormat_OLC) { // Open Location Code
|
} else if (gpsFormat == meshtastic_DeviceUIConfig_GpsCoordinateFormat_OLC) { // Open Location Code
|
||||||
geoCoord.getOLCCode(coordinateLine_1);
|
geoCoord.getOLCCode(coordinateLine_1);
|
||||||
coordinateLine_2[0] = '\0';
|
coordinateLine_2[0] = '\0';
|
||||||
} else if (gpsFormat == meshtastic_Config_DisplayConfig_GpsCoordinateFormat_OSGR) { // Ordnance Survey Grid Reference
|
} else if (gpsFormat == meshtastic_DeviceUIConfig_GpsCoordinateFormat_OSGR) { // Ordnance Survey Grid Reference
|
||||||
if (geoCoord.getOSGRE100k() == 'I' || geoCoord.getOSGRN100k() == 'I') { // OSGR is only valid around the UK region
|
if (geoCoord.getOSGRE100k() == 'I' || geoCoord.getOSGRN100k() == 'I') { // OSGR is only valid around the UK region
|
||||||
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "%s", "Out of Boundary");
|
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "%s", "Out of Boundary");
|
||||||
coordinateLine_2[0] = '\0';
|
coordinateLine_2[0] = '\0';
|
||||||
@ -160,6 +160,48 @@ void UIRenderer::drawGpsCoordinates(OLEDDisplay *display, int16_t x, int16_t y,
|
|||||||
snprintf(coordinateLine_2, sizeof(coordinateLine_2), "%05u E %05u N", geoCoord.getOSGREasting(),
|
snprintf(coordinateLine_2, sizeof(coordinateLine_2), "%05u E %05u N", geoCoord.getOSGREasting(),
|
||||||
geoCoord.getOSGRNorthing());
|
geoCoord.getOSGRNorthing());
|
||||||
}
|
}
|
||||||
|
} else if (gpsFormat == meshtastic_DeviceUIConfig_GpsCoordinateFormat_MLS) { // Maidenhead Locator System
|
||||||
|
double lat = geoCoord.getLatitude() * 1e-7;
|
||||||
|
double lon = geoCoord.getLongitude() * 1e-7;
|
||||||
|
|
||||||
|
// Normalize
|
||||||
|
if (lat > 90.0)
|
||||||
|
lat = 90.0;
|
||||||
|
if (lat < -90.0)
|
||||||
|
lat = -90.0;
|
||||||
|
while (lon < -180.0)
|
||||||
|
lon += 360.0;
|
||||||
|
while (lon >= 180.0)
|
||||||
|
lon -= 360.0;
|
||||||
|
|
||||||
|
double adjLon = lon + 180.0;
|
||||||
|
double adjLat = lat + 90.0;
|
||||||
|
|
||||||
|
char maiden[10]; // enough for 8-char + null
|
||||||
|
|
||||||
|
// Field (2 letters)
|
||||||
|
int lonField = int(adjLon / 20.0);
|
||||||
|
int latField = int(adjLat / 10.0);
|
||||||
|
adjLon -= lonField * 20.0;
|
||||||
|
adjLat -= latField * 10.0;
|
||||||
|
|
||||||
|
// Square (2 digits)
|
||||||
|
int lonSquare = int(adjLon / 2.0);
|
||||||
|
int latSquare = int(adjLat / 1.0);
|
||||||
|
adjLon -= lonSquare * 2.0;
|
||||||
|
adjLat -= latSquare * 1.0;
|
||||||
|
|
||||||
|
// Subsquare (2 letters)
|
||||||
|
double lonUnit = 2.0 / 24.0;
|
||||||
|
double latUnit = 1.0 / 24.0;
|
||||||
|
int lonSub = int(adjLon / lonUnit);
|
||||||
|
int latSub = int(adjLat / latUnit);
|
||||||
|
|
||||||
|
snprintf(maiden, sizeof(maiden), "%c%c%c%c%c%c", 'A' + lonField, 'A' + latField, '0' + lonSquare, '0' + latSquare,
|
||||||
|
'A' + lonSub, 'A' + latSub);
|
||||||
|
|
||||||
|
snprintf(coordinateLine_1, sizeof(coordinateLine_1), "MH: %s", maiden);
|
||||||
|
coordinateLine_2[0] = '\0'; // only need one line
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(mode, "line1") == 0) {
|
if (strcmp(mode, "line1") == 0) {
|
||||||
@ -1014,19 +1056,6 @@ void UIRenderer::drawCompassAndLocationScreen(OLEDDisplay *display, OLEDDisplayU
|
|||||||
|
|
||||||
// If GPS is off, no need to display these parts
|
// If GPS is off, no need to display these parts
|
||||||
if (strcmp(displayLine, "GPS off") != 0 && strcmp(displayLine, "No GPS") != 0) {
|
if (strcmp(displayLine, "GPS off") != 0 && strcmp(displayLine, "No GPS") != 0) {
|
||||||
/* MUST BE MOVED TO CLOCK SCREEN
|
|
||||||
// === Second Row: Date ===
|
|
||||||
uint32_t rtc_sec = getValidTime(RTCQuality::RTCQualityDevice, true);
|
|
||||||
char datetimeStr[25];
|
|
||||||
bool showTime = false; // set to true for full datetime
|
|
||||||
UIRenderer::formatDateTime(datetimeStr, sizeof(datetimeStr), rtc_sec, display, showTime);
|
|
||||||
char fullLine[40];
|
|
||||||
snprintf(fullLine, sizeof(fullLine), " Date: %s", datetimeStr);
|
|
||||||
#if !defined(M5STACK_UNITC6L)
|
|
||||||
display->drawString(0, getTextPositions(display)[line++], fullLine);
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
|
|
||||||
// === Second Row: Last GPS Fix ===
|
// === Second Row: Last GPS Fix ===
|
||||||
if (gpsStatus->getLastFixMillis() > 0) {
|
if (gpsStatus->getLastFixMillis() > 0) {
|
||||||
uint32_t delta = (millis() - gpsStatus->getLastFixMillis()) / 1000; // seconds since last fix
|
uint32_t delta = (millis() - gpsStatus->getLastFixMillis()) / 1000; // seconds since last fix
|
||||||
@ -1039,54 +1068,11 @@ void UIRenderer::drawCompassAndLocationScreen(OLEDDisplay *display, OLEDDisplayU
|
|||||||
#if defined(USE_EINK)
|
#if defined(USE_EINK)
|
||||||
// E-Ink: skip seconds, show only days/hours/mins
|
// E-Ink: skip seconds, show only days/hours/mins
|
||||||
if (days > 0) {
|
if (days > 0) {
|
||||||
snprintf(buf, sizeof(buf), " Last: %ud %uh", days, hours);
|
snprintf(buf, sizeof(buf), "Last: %ud %uh", days, hours);
|
||||||
} else if (hours > 0) {
|
} else if (hours > 0) {
|
||||||
snprintf(buf, sizeof(buf), " Last: %uh %um", hours, mins);
|
snprintf(buf, sizeof(buf), "Last: %uh %um", hours, mins);
|
||||||
} else {
|
} else {
|
||||||
snprintf(buf, sizeof(buf), " Last: %um", mins);
|
snprintf(buf, sizeof(buf), "Last: %um", mins);
|
||||||
}
|
|
||||||
#else
|
|
||||||
// Non E-Ink: include seconds where useful
|
|
||||||
if (days > 0) {
|
|
||||||
snprintf(buf, sizeof(buf), " Last: %ud %uh", days, hours);
|
|
||||||
} else if (hours > 0) {
|
|
||||||
snprintf(buf, sizeof(buf), " Last: %uh %um", hours, mins);
|
|
||||||
} else if (mins > 0) {
|
|
||||||
snprintf(buf, sizeof(buf), " Last: %um %us", mins, secs);
|
|
||||||
} else {
|
|
||||||
snprintf(buf, sizeof(buf), " Last: %us", secs);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
display->drawString(0, getTextPositions(display)[line++], buf);
|
|
||||||
} else {
|
|
||||||
display->drawString(0, getTextPositions(display)[line++], " Last: ?");
|
|
||||||
}
|
|
||||||
|
|
||||||
// === Third Row: Latitude ===
|
|
||||||
char latStr[32];
|
|
||||||
#if defined(M5STACK_UNITC6L)
|
|
||||||
snprintf(latStr, sizeof(latStr), "Lat:%.5f", geoCoord.getLatitude() * 1e-7);
|
|
||||||
display->drawString(x, getTextPositions(display)[line++] + 2, latStr);
|
|
||||||
#else
|
|
||||||
snprintf(latStr, sizeof(latStr), " Lat: %.5f", geoCoord.getLatitude() * 1e-7);
|
|
||||||
// === Second Row: Last GPS Fix ===
|
|
||||||
if (gpsStatus->getLastFixMillis() > 0) {
|
|
||||||
uint32_t delta = (millis() - gpsStatus->getLastFixMillis()) / 1000; // seconds since last fix
|
|
||||||
uint32_t days = delta / 86400;
|
|
||||||
uint32_t hours = (delta % 86400) / 3600;
|
|
||||||
uint32_t mins = (delta % 3600) / 60;
|
|
||||||
uint32_t secs = delta % 60;
|
|
||||||
|
|
||||||
char buf[32];
|
|
||||||
#if defined(USE_EINK)
|
|
||||||
// E-Ink: skip seconds, show only days/hours/mins
|
|
||||||
if (days > 0) {
|
|
||||||
snprintf(buf, sizeof(buf), " Last: %ud %uh", days, hours);
|
|
||||||
} else if (hours > 0) {
|
|
||||||
snprintf(buf, sizeof(buf), " Last: %uh %um", hours, mins);
|
|
||||||
} else {
|
|
||||||
snprintf(buf, sizeof(buf), " Last: %um", mins);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
// Non E-Ink: include seconds where useful
|
// Non E-Ink: include seconds where useful
|
||||||
@ -1109,38 +1095,11 @@ void UIRenderer::drawCompassAndLocationScreen(OLEDDisplay *display, OLEDDisplayU
|
|||||||
// === Third Row: Line 1 GPS Info ===
|
// === Third Row: Line 1 GPS Info ===
|
||||||
UIRenderer::drawGpsCoordinates(display, x, getTextPositions(display)[line++], gpsStatus, "line1");
|
UIRenderer::drawGpsCoordinates(display, x, getTextPositions(display)[line++], gpsStatus, "line1");
|
||||||
|
|
||||||
if (config.display.gps_format != meshtastic_Config_DisplayConfig_GpsCoordinateFormat_OLC) {
|
if (uiconfig.gps_format != meshtastic_DeviceUIConfig_GpsCoordinateFormat_OLC &&
|
||||||
|
uiconfig.gps_format != meshtastic_DeviceUIConfig_GpsCoordinateFormat_MLS) {
|
||||||
// === Fourth Row: Line 2 GPS Info ===
|
// === Fourth Row: Line 2 GPS Info ===
|
||||||
UIRenderer::drawGpsCoordinates(display, x, getTextPositions(display)[line++], gpsStatus, "line2");
|
UIRenderer::drawGpsCoordinates(display, x, getTextPositions(display)[line++], gpsStatus, "line2");
|
||||||
}
|
}
|
||||||
// === Third Row: Latitude ===
|
|
||||||
char latStr[32];
|
|
||||||
snprintf(latStr, sizeof(latStr), "Lat: %.5f", geoCoord.getLatitude() * 1e-7);
|
|
||||||
display->drawString(x, getTextPositions(display)[line++], latStr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// === Fourth Row: Longitude ===
|
|
||||||
char lonStr[32];
|
|
||||||
#if defined(M5STACK_UNITC6L)
|
|
||||||
snprintf(lonStr, sizeof(lonStr), "Lon:%.3f", geoCoord.getLongitude() * 1e-7);
|
|
||||||
display->drawString(x, getTextPositions(display)[line++] + 4, lonStr);
|
|
||||||
#else
|
|
||||||
snprintf(lonStr, sizeof(lonStr), " Lon: %.5f", geoCoord.getLongitude() * 1e-7);
|
|
||||||
snprintf(lonStr, sizeof(lonStr), "Lon: %.5f", geoCoord.getLongitude() * 1e-7);
|
|
||||||
display->drawString(x, getTextPositions(display)[line++], lonStr);
|
|
||||||
|
|
||||||
// === Fourth/Fifth Row: Altitude ===
|
|
||||||
char DisplayLineTwo[32] = {0};
|
|
||||||
int32_t alt = (strcmp(displayLine, "Phone GPS") == 0 && ourNode && nodeDB->hasValidPosition(ourNode))
|
|
||||||
? ourNode->position.altitude
|
|
||||||
: geoCoord.getAltitude();
|
|
||||||
if (config.display.units == meshtastic_Config_DisplayConfig_DisplayUnits_IMPERIAL) {
|
|
||||||
snprintf(DisplayLineTwo, sizeof(DisplayLineTwo), "Alt: %.0fft", geoCoord.getAltitude() * METERS_TO_FEET);
|
|
||||||
} else {
|
|
||||||
snprintf(DisplayLineTwo, sizeof(DisplayLineTwo), "Alt: %.0im", geoCoord.getAltitude());
|
|
||||||
}
|
|
||||||
display->drawString(x, getTextPositions(display)[line++], DisplayLineTwo);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#if !defined(M5STACK_UNITC6L)
|
#if !defined(M5STACK_UNITC6L)
|
||||||
// === Draw Compass if heading is valid ===
|
// === Draw Compass if heading is valid ===
|
||||||
|
Loading…
Reference in New Issue
Block a user