mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-08-01 01:36:12 +00:00
feat(ui): GPS breadcrumb phase 1 — storage, sampling, Summary view
Adds Tools › Breadcrumb. Enter on the screen toggles tracking; while active, UITask::loop samples GPS at the cadence chosen in settings (default 1 min) and drops the point into a 256-entry RAM ring guarded by a min-distance gate (default 25 m). A "G" indicator joins "A" in the status bar with the same blink convention. New storage: - examples/companion_radio/Breadcrumb.h — BreadcrumbStore class - 256 × 12 B = 3 KB RAM (survives auto-off, lost on reboot — explicit flash-slot save comes in phase 4) - Haversine min-delta gate, total distance, elapsed seconds, current km/h, bounding-box helper New screen: - examples/companion_radio/ui-new/BreadcrumbScreen.h — Summary view with Status, Points, Dist (m or km), Time (h:mm), Speed; Enter toggles tracking, Esc returns to Tools Schema bump 0xC0DE0002 → 0xC0DE0003 for two new NodePrefs bytes: breadcrumb_interval_idx (1min default) and breadcrumb_min_delta_idx (25m default). Older saves leave both at zero, which matches the new defaults. DataStore::loadPrefsInt/savePrefs read/write the pair. Logging on/off is a runtime flag inside BreadcrumbStore — not a preference — so reboot returns to the off state cleanly; the user will be able to persist a snapshot to a slot in phase 4. Phase 2 (map view), 3 (point list), 4 (slot save/load, GPX export over USB), and 5 (settings UI) follow incrementally. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
ccf45f0c0c
commit
adef2fceb9
+12
-4
@@ -58,12 +58,19 @@ Render layout (250×122 landscape e-ink):
|
||||
|
||||
Joystick navigation is natural with 6 tiles (UP/DOWN between rows, LEFT/RIGHT within row).
|
||||
|
||||
### 📋 GPS breadcrumb
|
||||
|
||||
📋 planned
|
||||
### 🚧 GPS breadcrumb
|
||||
|
||||
Tools › Breadcrumb. Periodically samples `(lat, lon, ts)` into a RAM ring buffer; user explicitly saves snapshots to flash.
|
||||
|
||||
**Logging is a runtime state**, not a settings value. User starts/stops from the
|
||||
Tools › Breadcrumb screen. Once active, sampling continues in the background
|
||||
regardless of which screen is shown, and a `G` indicator appears in the status
|
||||
bar (analogous to `A` for auto-advert). A reboot resets the active state to
|
||||
off; the RAM trail is also lost on reboot unless saved to a flash slot first.
|
||||
|
||||
Settings only control sampling cadence and the min-distance gate — they don't
|
||||
enable/disable the feature.
|
||||
|
||||
**Storage model — RAM ring with explicit save**
|
||||
|
||||
Rationale: auto-off only blanks the display, the firmware keeps running, so the RAM trail survives every idle scenario. Typical use is a single trip start→stop while wearing the device; persisting across reboots is rarely wanted. RAM-only avoids ~1400 flash writes/day and the LittleFS wear that comes with continuous logging.
|
||||
@@ -98,8 +105,9 @@ Statistics computed on the fly walking the ring:
|
||||
- Current speed: dist(last, prev) / (ts[last] - ts[prev])
|
||||
|
||||
Settings:
|
||||
- Settings › GPS › Breadcrumb interval: off / 30 s / 1 min / 5 min / 15 min (default 1 min)
|
||||
- Settings › GPS › Breadcrumb interval: 30 s / 1 min / 5 min / 15 min (default 1 min) — only the cadence; logging on/off is a Tools toggle
|
||||
- Settings › GPS › Breadcrumb min delta: 5 m / 25 m / 100 m (skip near-stationary samples to keep the ring densely populated with real movement)
|
||||
- Export format: GPX (standard for GPS tracks; OSMAnd / Garmin compatible)
|
||||
|
||||
Schema impact: new prefs fields `uint8_t breadcrumb_interval_idx`, `uint8_t breadcrumb_min_delta_idx`. Sentinel bump. The slot files are separate from prefs.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user