diff --git a/src/gps/UBloxGPS.cpp b/src/gps/UBloxGPS.cpp index 91c895a1..aae4ecc3 100644 --- a/src/gps/UBloxGPS.cpp +++ b/src/gps/UBloxGPS.cpp @@ -5,6 +5,11 @@ #include "sleep.h" #include +// if gps_update_interval below this value, do not powercycle the GPS +#define UBLOX_POWEROFF_THRESHOLD 90 + +extern RadioConfig radioConfig; + UBloxGPS::UBloxGPS() {} bool UBloxGPS::tryConnect() @@ -201,15 +206,20 @@ bool UBloxGPS::whileIdle() /// Note: ublox doesn't need a wake method, because as soon as we send chars to the GPS it will wake up void UBloxGPS::sleep() { - // Tell GPS to power down until we send it characters on serial port (we leave vcc connected) - ublox.powerOff(); - // setGPSPower(false); + if (radioConfig.preferences.gps_update_interval > UBLOX_POWEROFF_THRESHOLD) { + // Tell GPS to power down until we send it characters on serial port (we leave vcc connected) + ublox.powerOff(); + // setGPSPower(false); + } } void UBloxGPS::wake() { - fixType = 0; // assume we hace no fix yet + if (radioConfig.preferences.gps_update_interval > UBLOX_POWEROFF_THRESHOLD) { + fixType = 0; // assume we have no fix yet + } + // this is idempotent setGPSPower(true); // Note: no delay needed because now we leave gps power on always and instead use ublox.powerOff()