feat(gps): Do not start gps if lora region is unset (#10386)
* Disable gps thread on startup if lora region is unset There is little reason to waste battery on the gps if the data cannot yet be used. * fix goobered merge Refactor GPS enabling logic and remove duplicate code. * trunk --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
This commit is contained in:
co-authored by
GitHub
Jonathan Bennett
parent
29b3cfaeca
commit
9cef69a9d3
@@ -2257,6 +2257,11 @@ int32_t GPS::disable()
|
|||||||
return INT32_MAX;
|
return INT32_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GPS::isEnabled()
|
||||||
|
{
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
void GPS::toggleGpsMode()
|
void GPS::toggleGpsMode()
|
||||||
{
|
{
|
||||||
if (config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED) {
|
if (config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED) {
|
||||||
|
|||||||
@@ -98,6 +98,9 @@ class GPS : private concurrency::OSThread
|
|||||||
// Disable the thread
|
// Disable the thread
|
||||||
int32_t disable() override;
|
int32_t disable() override;
|
||||||
|
|
||||||
|
// Returns if the thread is enabled
|
||||||
|
bool isEnabled();
|
||||||
|
|
||||||
// toggle between enabled/disabled
|
// toggle between enabled/disabled
|
||||||
void toggleGpsMode();
|
void toggleGpsMode();
|
||||||
|
|
||||||
|
|||||||
@@ -214,6 +214,11 @@ static void applyLoraRegion(meshtastic_Config_LoRaConfig_RegionCode region, bool
|
|||||||
snprintf(moduleConfig.mqtt.root, sizeof(moduleConfig.mqtt.root), "%s/%s", default_mqtt_root, myRegion->name);
|
snprintf(moduleConfig.mqtt.root, sizeof(moduleConfig.mqtt.root), "%s/%s", default_mqtt_root, myRegion->name);
|
||||||
changes |= SEGMENT_MODULECONFIG;
|
changes |= SEGMENT_MODULECONFIG;
|
||||||
}
|
}
|
||||||
|
#if !MESHTASTIC_EXCLUDE_GPS
|
||||||
|
// Enable gps if it was previously disabled due to region not being set
|
||||||
|
if (gps != nullptr && !gps->isEnabled() && config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED)
|
||||||
|
gps->enable();
|
||||||
|
#endif
|
||||||
service->reloadConfig(changes);
|
service->reloadConfig(changes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -971,6 +971,12 @@ void setup()
|
|||||||
gps = GPS::createGps();
|
gps = GPS::createGps();
|
||||||
if (gps) {
|
if (gps) {
|
||||||
gpsStatus->observe(&gps->newStatus);
|
gpsStatus->observe(&gps->newStatus);
|
||||||
|
|
||||||
|
// If lora region is unset, disable the gps thread
|
||||||
|
if (config.lora.region == meshtastic_Config_LoRaConfig_RegionCode_UNSET &&
|
||||||
|
config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED) {
|
||||||
|
gps->disable();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("Run without GPS");
|
LOG_DEBUG("Run without GPS");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1020,6 +1020,14 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c, bool fromOthers)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !MESHTASTIC_EXCLUDE_GPS
|
||||||
|
// Enable gps if it was previously disabled due to region not being set
|
||||||
|
if (!requiresReboot && config.lora.region != meshtastic_Config_LoRaConfig_RegionCode_UNSET && gps != nullptr &&
|
||||||
|
!gps->isEnabled() && config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED) {
|
||||||
|
gps->enable();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
config.lora = validatedLora; // Finally, return the validated config back to the main config
|
config.lora = validatedLora; // Finally, return the validated config back to the main config
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user