* 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 commit 8b697cd2a445355dcfab5b33e0ce7a3128cab151.
* Revert "Attempt: Send PMREQ with duration 0 on MCU deep-sleep"
This reverts commit 9d29ec7603a88056b9115796b29b5023165a93bb.
* 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.
* Experimenting with deep sleep routers / repeaters
* Make decision to SDS or LS based on Router/Repeater role
* Don't sleep LoRA on router / repeater deep sleep
* Guards
* Platform guards
* Rename method
* Refactor GPS to not probe if pins not defined
* Use Named Constructor to clean up code
* Move doGPSPowerSave to GPS class
* Make sure to set GPS awake on triple-click
* Cleanup and remove dead code
* Rename GPS_PIN_WAKE to GPS_PIN_STANDBY
* Actually put GPS to sleep between fixes
* add GPS_POWER_TOGGLE for heltec-tracker and t-deck
* Change GPS_THREAD_INTERVAL to 200 ms
* More dead code, compiler warnings, and add returns
* Add Number of sats to log output
* Add pgs enable and triple-click config
* Track average GPS fix time to judge low-power time
* Feed PositionModule on GPS fix
* Don't turn off the 3v3_s line on RAK4631
when the rotary is present.
* Add GPS power standbyOnly option
* Delay setting time currentQuality
to avoid strange log message.
* Typos, comments, and remove unused variable
* Short-circuit the setAwake logic on GPS disable
* heltec-tracker 0.3 GPS power saving
* set en_gpio to defined state
* Fix fixed_position logic with GPS disabled
* Don't process GPS serial when not isAwake
* Add quirk for Heltec Tracker GPS powersave
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: mverch67 <manuel.verch@gmx.de>
Co-authored-by: Manuel <71137295+mverch67@users.noreply.github.com>
* Use UINT32_MAX to indicate no configured GPS
* Refactor GPS to not probe if pins not defined
* Minor cleanups related to rework
* Use Named Constructor to clean up code
* Actually disable the GPS thread
* Don't actually disable the GPS thread
* Move doGPSPowerSave to GPS class
* Make sure to set GPS awake on triple-click
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* T-Watch WIP
* Updates
* Temp
* Update screen spi bus and and backlight en
* Peripherals progress
* Fixes
* Fixes
* Updates
* DRV scaffolding
* Fixed touch-screen driver selection. WIP on DRV haptic feedback
* DRV2605 pmu channel
* Trunk
* Fixes and defaults
* Dropped an s
* Move PMU and turn off screen that way
* Add t-deck and t-watch-s3 to CI and cleanup
* More cleanup
* lay groundwork for a possible future architecture
* switch from feature opt-out to feature opt-in
* lay groundwork for a possible future architecture
* switch from feature opt-out to feature opt-in
* fix USE_RTC in variant.h for rak4631_epaper and t-echo
* ensure Screen.h is not included without configuration.h
Co-authored-by: Peter Lawrence <12226419+majbthrd@users.noreply.github.com>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* preflightSleep, notifySleep, notifyDeepSleep now allow arbitrary
drivers/devices/software to register for sleep notification.
* Use the proceeding to clean up MeshRadio - now the mesh radio is more
like an independent driver that doesn't care so much about other systems
* clean up MeshService so that it can work with zero MeshRadios added.
This is a prelude to supporting boards with multiple interfaces (wifi,
extra LORA radios etc) and allows development/testing in sim with a bare
ESP32 board
* Remove remaining ESP32 dependencies from the bare simulation target
this allows running on anything that implements the arduino API
because the ESP32 implementation will be different from NRF52
to make this possible I needed to decouple knowlege about bluetooth from
our mesh service. Instead mesh service now uses the Obserable pattern
to let any interested consumer get notified of important mesh changes
(currently that is only bluetooth, but really we should do the same
thing for decoupling the GUI 'app' from the mesh service)
@girtsf would you mind reviewing my Observer changes? I haven't written
C++ code in a long time ;-)