mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-13 00:35:16 +00:00

* Refactor GPSPowerState enum Identifies a case where the GPS hardware is awake, but an update is not yet desired * Change terminology * Clear old lock-time prediction on triple press * Use exponential smoothing to predict lock time * Rename averageLockTime to predictedLockTime * Attempt: Send PMREQ with duration 0 on MCU deep-sleep * Attempt 2: Send PMREQ with duration 0 on MCU deep-sleep * Revert "Attempt 2: Send PMREQ with duration 0 on MCU deep-sleep" This reverts commit8b697cd2a4
. * Revert "Attempt: Send PMREQ with duration 0 on MCU deep-sleep" This reverts commit9d29ec7603
. * Remove unused notifyGPSSleep Observable Handled with notifyDeepSleep, and enable() / disable() * WIP: simplify GPS power management An initial attempt only. * Honor #3e9e0fd * No-op when moving between GPS_IDLE and GPS_ACTIVE * Ensure U-blox GPS is awake to receive indefinite sleep command * Longer pause when waking U-blox to send sleep command * Actually implement soft and hard sleep.. * Dynamically estimate the threshold for GPS_HARDSLEEP * Fallback to GPS_HARDSLEEP, if GPS_SOFTSLEEP unsupported * Move "excessive search time" behavior to scheduler class * Minor logging adjustments * Promote log to warning * Gratuitous buffer clearing on boot * Fix inverted standby pin logic Specifically the standby pin for L76B, L76K and clones Discovered during T-Echo testing: totally broken function, probe method failing. * Remove redundant pin init Now handled by setPowerState * Replace max() with if statements Avoid those platform specific implementations.. * Trunk formatting New round of settings.json changes keep catching me out, have to remember to re-enable my "clang-format" for windows workaround. * Remove some asserts from setPowerState Original aim was to prevent sending a 0 second PMREQ to U-blox hardware as part of a timed sleep (GPS_HARDSLEEP, GPS_SOFTSLEEP). I'm not sure this is super important, and it feels tidier to just allow the 0 second sleeptime here, rather than fudge the sleeptime further up. * Fix an error determining whether GPS_SOFTSLEEP is supported * Clarify a log entry * Set PIN_STANDBY for MCU deep-sleep Required to reach TTGO's advertised 0.25mA sleep current for T-Echo. Without this change: ~6mA.
29 lines
1.2 KiB
C++
29 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include "configuration.h"
|
|
|
|
// Encapsulates code responsible for the timing of GPS updates
|
|
class GPSUpdateScheduling
|
|
{
|
|
public:
|
|
// Marks the time of these events, for calculation use
|
|
void informSearching();
|
|
void informGotLock(); // Predicted lock-time is recalculated here
|
|
|
|
void reset(); // Reset the prediction - after GPS::disable() / GPS::enable()
|
|
bool isUpdateDue(); // Is it time to begin searching for a GPS position?
|
|
bool searchedTooLong(); // Have we been searching for too long?
|
|
|
|
uint32_t msUntilNextSearch(); // How long until we need to begin searching for a GPS? Info provided to GPS hardware for sleep
|
|
uint32_t elapsedSearchMs(); // How long have we been searching so far?
|
|
uint32_t predictedSearchDurationMs(); // How long do we expect to spend searching for a lock?
|
|
|
|
private:
|
|
void updateLockTimePrediction(); // Called from informGotLock
|
|
uint32_t searchStartedMs = 0;
|
|
uint32_t searchEndedMs = 0;
|
|
uint32_t searchCount = 0;
|
|
uint32_t predictedMsToGetLock = 0;
|
|
|
|
const float weighting = 0.2; // Controls exponential smoothing of lock-times prediction. 20% weighting of "latest lock-time".
|
|
}; |