From 36c5fafec6dee65fa29107b137797bd8d7f5bc3d Mon Sep 17 00:00:00 2001 From: pelgraine <140762863+pelgraine@users.noreply.github.com> Date: Mon, 2 Mar 2026 19:49:03 +1100 Subject: [PATCH] removed gps cycle due to slow or no fix from cold start frequency --- examples/companion_radio/main.cpp | 35 +++++----------- examples/companion_radio/ui-new/UITask.cpp | 46 +++++++--------------- 2 files changed, 25 insertions(+), 56 deletions(-) diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index e7269f1..a4bc6b1 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -4,7 +4,6 @@ #include "MyMesh.h" #include "variant.h" // Board-specific defines (HAS_GPS, etc.) #include "target.h" // For sensors, board, etc. -#include "GPSDutyCycle.h" #include "CPUPowerManager.h" // T-Deck Pro Keyboard support @@ -88,10 +87,6 @@ TouchInput touchInput(&Wire); #endif - // Power management - #if HAS_GPS - GPSDutyCycle gpsDuty; - #endif CPUPowerManager cpuPower; void initKeyboard(); @@ -782,18 +777,22 @@ void setup() { } #endif - // GPS duty cycle — honour saved pref, default to enabled on first boot + // GPS power — honour saved pref, default to enabled on first boot #if HAS_GPS { bool gps_wanted = the_mesh.getNodePrefs()->gps_enabled; - gpsDuty.setStreamCounter(&gpsStream); - gpsDuty.begin(gps_wanted); if (gps_wanted) { + #ifdef PIN_GPS_EN + digitalWrite(PIN_GPS_EN, GPS_EN_ACTIVE); + #endif sensors.setSettingValue("gps", "1"); } else { + #ifdef PIN_GPS_EN + digitalWrite(PIN_GPS_EN, !GPS_EN_ACTIVE); + #endif sensors.setSettingValue("gps", "0"); } - MESH_DEBUG_PRINTLN("setup() - GPS duty cycle started (enabled=%d)", gps_wanted); + MESH_DEBUG_PRINTLN("setup() - GPS power %s", gps_wanted ? "on" : "off"); } #endif @@ -812,18 +811,6 @@ void setup() { void loop() { the_mesh.loop(); - // GPS duty cycle — check for fix and manage power state - #if HAS_GPS - { - bool gps_hw_on = gpsDuty.loop(); - if (gps_hw_on) { - LocationProvider* lp = sensors.getLocationProvider(); - if (lp != NULL && lp->isValid()) { - gpsDuty.notifyFix(); - } - } - } - #endif sensors.loop(); @@ -834,11 +821,9 @@ void loop() { lastMapUpdate = millis(); MapScreen* ms = (MapScreen*)ui_task.getMapScreen(); if (ms) { - // Update own GPS position only when GPS hardware is active + // Update own GPS position when GPS is enabled #if HAS_GPS - if (gpsDuty.isHardwareOn()) { - ms->updateGPSPosition(sensors.node_lat, sensors.node_lon); - } + ms->updateGPSPosition(sensors.node_lat, sensors.node_lon); #endif // Always refresh contact markers (new contacts arrive via radio) diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 4e1360d..16d5208 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -5,7 +5,6 @@ #include "RepeaterAdminScreen.h" #include "MapScreen.h" #include "target.h" -#include "GPSDutyCycle.h" #ifdef WIFI_SSID #include #endif @@ -427,34 +426,16 @@ public: display.drawTextCentered(display.width() / 2, 64 - 11, "advert: " PRESS_LABEL); #if ENV_INCLUDE_GPS == 1 } else if (_page == HomePage::GPS) { - extern GPSDutyCycle gpsDuty; extern GPSStreamCounter gpsStream; LocationProvider* nmea = sensors.getLocationProvider(); char buf[50]; int y = 18; - // GPS state line with duty cycle info + // GPS state line if (!_node_prefs->gps_enabled) { strcpy(buf, "gps off"); } else { - switch (gpsDuty.getState()) { - case GPSDutyState::ACQUIRING: { - uint32_t elapsed = gpsDuty.acquireElapsedSecs(); - sprintf(buf, "acquiring %us", (unsigned)elapsed); - break; - } - case GPSDutyState::SLEEPING: { - uint32_t remain = gpsDuty.sleepRemainingSecs(); - if (remain >= 60) { - sprintf(buf, "sleep %um%02us", (unsigned)(remain / 60), (unsigned)(remain % 60)); - } else { - sprintf(buf, "sleep %us", (unsigned)remain); - } - break; - } - default: - strcpy(buf, "gps off"); - } + strcpy(buf, "gps on"); } display.drawTextLeftAlign(0, y, buf); @@ -470,9 +451,9 @@ public: display.drawTextRightAlign(display.width()-1, y, buf); y = y + 12; - // NMEA sentence counter — confirms baud rate and data flow + // NMEA sentence counter — confirms baud rate and data flow display.drawTextLeftAlign(0, y, "sentences"); - if (gpsDuty.isHardwareOn()) { + if (_node_prefs->gps_enabled) { uint16_t sps = gpsStream.getSentencesPerSec(); uint32_t total = gpsStream.getSentenceCount(); sprintf(buf, "%u/s (%lu)", sps, (unsigned long)total); @@ -1097,10 +1078,11 @@ void UITask::shutdown(bool restart){ // Disable GPS if active #if ENV_INCLUDE_GPS == 1 { - extern GPSDutyCycle gpsDuty; if (_sensors != NULL && _node_prefs != NULL && _node_prefs->gps_enabled) { _sensors->setSettingValue("gps", "0"); - gpsDuty.disable(); + #ifdef PIN_GPS_EN + digitalWrite(PIN_GPS_EN, !GPS_EN_ACTIVE); + #endif } } #endif @@ -1358,20 +1340,22 @@ bool UITask::getGPSState() { void UITask::toggleGPS() { #if ENV_INCLUDE_GPS == 1 - extern GPSDutyCycle gpsDuty; - if (_sensors != NULL) { if (_node_prefs->gps_enabled) { - // Disable GPS — cut hardware power + // Disable GPS — cut hardware power _sensors->setSettingValue("gps", "0"); _node_prefs->gps_enabled = 0; - gpsDuty.disable(); + #ifdef PIN_GPS_EN + digitalWrite(PIN_GPS_EN, !GPS_EN_ACTIVE); + #endif notify(UIEventType::ack); } else { - // Enable GPS — start duty cycle + // Enable GPS — power on hardware _sensors->setSettingValue("gps", "1"); _node_prefs->gps_enabled = 1; - gpsDuty.enable(); + #ifdef PIN_GPS_EN + digitalWrite(PIN_GPS_EN, GPS_EN_ACTIVE); + #endif notify(UIEventType::ack); } the_mesh.savePrefs();