Add informSearchFailed method to update GPS power state handling (#10394)
This commit is contained in:
+5
-2
@@ -1017,10 +1017,13 @@ void GPS::up()
|
|||||||
setPowerState(GPS_ACTIVE);
|
setPowerState(GPS_ACTIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We've got a GPS lock. Enter a low power state, potentially.
|
// We've finished a GPS search cycle (lock or timeout). Enter a low power state, potentially.
|
||||||
void GPS::down()
|
void GPS::down()
|
||||||
{
|
{
|
||||||
scheduling.informGotLock();
|
if (hasValidLocation)
|
||||||
|
scheduling.informGotLock();
|
||||||
|
else
|
||||||
|
scheduling.informSearchFailed();
|
||||||
uint32_t predictedSearchDuration = scheduling.predictedSearchDurationMs();
|
uint32_t predictedSearchDuration = scheduling.predictedSearchDurationMs();
|
||||||
uint32_t sleepTime = scheduling.msUntilNextSearch();
|
uint32_t sleepTime = scheduling.msUntilNextSearch();
|
||||||
uint32_t updateInterval = Default::getConfiguredOrDefaultMs(config.position.gps_update_interval);
|
uint32_t updateInterval = Default::getConfiguredOrDefaultMs(config.position.gps_update_interval);
|
||||||
|
|||||||
@@ -17,6 +17,16 @@ void GPSUpdateScheduling::informGotLock()
|
|||||||
updateLockTimePrediction();
|
updateLockTimePrediction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Search finished without obtaining a fix. We still need to mark the end time so
|
||||||
|
// the next sleep is timed correctly, but we must not feed the timeout duration
|
||||||
|
// into predictedMsToGetLock — doing so poisons msUntilNextSearch() and causes
|
||||||
|
// down() to fall into GPS_IDLE, leaving the chip awake on subsequent indoor cycles.
|
||||||
|
void GPSUpdateScheduling::informSearchFailed()
|
||||||
|
{
|
||||||
|
searchEndedMs = millis();
|
||||||
|
LOG_DEBUG("GPS search ended without fix after %us", (searchEndedMs - searchStartedMs) / 1000);
|
||||||
|
}
|
||||||
|
|
||||||
// Clear old lock-time prediction data.
|
// Clear old lock-time prediction data.
|
||||||
// When re-enabling GPS with user button.
|
// When re-enabling GPS with user button.
|
||||||
void GPSUpdateScheduling::reset()
|
void GPSUpdateScheduling::reset()
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ class GPSUpdateScheduling
|
|||||||
public:
|
public:
|
||||||
// Marks the time of these events, for calculation use
|
// Marks the time of these events, for calculation use
|
||||||
void informSearching();
|
void informSearching();
|
||||||
void informGotLock(); // Predicted lock-time is recalculated here
|
void informGotLock(); // Predicted lock-time is recalculated here
|
||||||
|
void informSearchFailed(); // Search ended without a fix; prediction is left untouched
|
||||||
|
|
||||||
void reset(); // Reset the prediction - after GPS::disable() / GPS::enable()
|
void reset(); // Reset the prediction - after GPS::disable() / GPS::enable()
|
||||||
bool isUpdateDue(); // Is it time to begin searching for a GPS position?
|
bool isUpdateDue(); // Is it time to begin searching for a GPS position?
|
||||||
|
|||||||
Reference in New Issue
Block a user