From 566119015452e8928eb26a82dec83c4396703b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20St=C3=BCrmer?= Date: Sun, 1 Feb 2026 11:10:32 +0100 Subject: [PATCH] chore: enable gps temporarily if permission is set --- .../sensors/EnvironmentSensorManager.cpp | 18 ++++++++++++++++++ src/helpers/sensors/EnvironmentSensorManager.h | 1 + 2 files changed, 19 insertions(+) diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index a75d378c8..55105fdec 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -708,6 +708,12 @@ void EnvironmentSensorManager::loop() { #if ENV_INCLUDE_GPS _location->loop(); + + if (gps_tmp_flag && !gps_active) { + MESH_DEBUG_PRINTLN("[GPS] GPS request flag set. Starting GPS for location fix."); // Debug message + start_gps(); + } + if (millis() > next_gps_update) { if(gps_active){ @@ -718,6 +724,12 @@ void EnvironmentSensorManager::loop() { MESH_DEBUG_PRINTLN("lat %f lon %f", node_lat, node_lon); node_altitude = ((double)_location->getAltitude()) / 1000.0; MESH_DEBUG_PRINTLN("lat %f lon %f alt %f", node_lat, node_lon, node_altitude); + + if (gps_tmp_flag) { + MESH_DEBUG_PRINTLN("[GPS] GPS location fix obtained. Disabling GPS."); + gps_tmp_flag = false; + stop_gps(); + } } #else if (_location->isValid()) { @@ -726,6 +738,12 @@ void EnvironmentSensorManager::loop() { MESH_DEBUG_PRINTLN("lat %f lon %f", node_lat, node_lon); node_altitude = ((double)_location->getAltitude()) / 1000.0; MESH_DEBUG_PRINTLN("lat %f lon %f alt %f", node_lat, node_lon, node_altitude); + + if (gps_tmp_flag) { + MESH_DEBUG_PRINTLN("[GPS] GPS location fix obtained. Disabling GPS."); + gps_tmp_flag = false; + stop_gps(); + } } #endif } diff --git a/src/helpers/sensors/EnvironmentSensorManager.h b/src/helpers/sensors/EnvironmentSensorManager.h index f176a33f5..5cf12694a 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.h +++ b/src/helpers/sensors/EnvironmentSensorManager.h @@ -32,6 +32,7 @@ class EnvironmentSensorManager : public SensorManager { void start_gps(); void stop_gps(); void initBasicGPS(); + bool gps_tmp_flag = false; #ifdef RAK_BOARD void rakGPSInit(); bool gpsIsAwake(uint8_t ioPin);