Files
MeshCore-Solo/docs/releases/solo-v1.14.md
T
JakubandClaude Opus 4.8 0c807f62c8 docs: add Solo v1.14 release notes
Release notes covering the navigation suite (waypoints, GPS compass,
navigate-to-point, mesh location share, waypoints in GPX), the global
metric/imperial Units setting, the long-message buffer fix, plus the
existing v1.14 items, under docs/releases/solo-v1.14.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 16:02:46 +02:00

54 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Wio Tracker L1 — Solo Firmware v1.14
Based on MeshCore upstream v1.15.
## Highlights
- **GPS navigation suite** — the L1 becomes a standalone handheld navigator, no phone needed: **waypoints** (mark your spot or type coordinates, then get live bearing + distance back), a **GPS compass**, **navigate-to-anything** (a waypoint, the trail start, a mesh node, or a location someone texts you), and **share/save locations over the mesh**. No extra hardware — heading comes from GPS course-over-ground.
- **Renamed Plus → Solo** — to better reflect that this firmware is designed for *off-grid, standalone* use without needing a companion app on the phone; release artefacts are now `solo-v1.14-oled.uf2` and `solo-v1.14-eink.uf2`.
- **Global Units setting** — one Metric/Imperial switch (Settings System) drives every distance and speed in the UI — Nearby, Trail, navigation, the min-distance gate and the map scale bar.
- **E-ink screenshot support** — `tools/screenshot.py` now works with both OLED and the e-ink panel; auto-detects rotation 03 and uses GxEPD2's visible dimensions; build with `-D ENABLE_SCREENSHOT`.
- **Battery percentage field** — new `Batt %` option for the Clock page dashboard, now sharing the same LiPo discharge curve and `low_batt_mv` cutoff as the top-bar indicator (so both readings agree).
- **Channel favourites** — mark individual channels as favourites from the channel context menu; new Settings Contacts filter to hide non-favourite channels.
- **Context menu cycling unified** — LEFT/RIGHT now cycles values everywhere (Notif, Melody, Fav, Duration, BPM) without closing the popup; ENTER reserved for one-shot actions.
- **Popup menus expand to fit the screen** — on portrait e-ink up to 16 items fit without scrolling; on OLED items are now hard-capped to what physically fits.
## Changes
### Navigation (new)
- **Waypoints** — *Tools Trail Hold Enter*: **Mark here** drops one at the current GPS fix; **Waypoints** opens the list, which carries a synthetic **Trail start** backtrack row, a usage counter (`WAYPOINTS 3/16`), and an **+ Add by coords** row to enter a point by lat/lon/label with no fix required. Per-waypoint **Rename / Delete / Send**, plus **Clear waypoints**. Stored in their own `/waypoints` file (16 max) — independent of the trail and **not** cleared by Reset trail.
- **Navigate-to-point view** — distance plus two *absolute* bearings, **To:** (target) and **Hdg:** (your course over ground), to compare by eye — no magnetometer needed. Reused by waypoints, trail backtrack, Nearby-node navigation and message-shared locations.
- **GPS compass** — *Tools Compass*: a heads-up **scrolling heading tape** (N..E..S..W under a fixed travel-direction pointer) with a large degrees + cardinal readout, derived from GPS movement. Works whether or not a trail is recording.
- **Course-over-ground source** — a heading ring in UITask, sampled ~1 s independently of trail logging, with gross-GPS-jump rejection and a minimum-movement gate; resets after a GPS gap so a reacquired fix can't imply a teleport heading.
- **Trail map as a live view** — the Map draws your current position and all waypoints continuously, even with no trail recording. While a trail exists the view frames the recorded route and clamps far-off waypoints to the nearest edge (a distant mark can't blow up the scale); with no trail it auto-fits to your waypoints and position. Waypoint markers show the first two label characters, placed edge-aware so labels stay on-map.
- **Navigate / save a shared location** — any message carrying a `lat,lon` (what `{loc}` inserts) or a `[WAY]lat,lon label` share offers **Navigate** and **Save waypoint** from its **Hold Enter** menu — on the history row or in fullscreen, for DMs and channels. **Send** on a waypoint shares it to a contact or channel, pre-filling the message for you to confirm.
- **Waypoints in GPX** — the GPX export now includes saved waypoints as `<wpt>` elements (label → `<name>`, plus `<time>`) alongside the track, so they import as pins in OsmAnd / Garmin / GPX Studio.
- **Trail readout & units** — the Trail action menu's old four-way km/h·mph·min/km·min/mi cycle is now a **Speed / Pace** toggle; the metric-vs-imperial unit follows the global Units setting. The min-distance gate shows metric (5/10/25/100 m) or imperial (15/30/75/300 ft) accordingly.
### New features
- **E-ink screenshot** — `WioTrackerL1Eink_companion_dual_dev` env enables capture; protocol header widened to 11 bytes (display type, rotation, uint16 width/height/chunk fields) so it scales to any GxEPD2 panel and rotation.
- **Dashboard `Batt %` field** — new Clock-page option computed from the same piecewise LiPo curve used by the top-bar battery indicator.
- **Channel favourites** — `ch_fav_bitmask` in prefs; toggle from Channel context menu; Settings Contacts Channels filter (all / favourites only).
- **GPS trail — scale grid on map** — toggle from the Trail action menu (Grid row); cycles with LEFT/RIGHT now (previously ENTER only).
- **Ringtone editor migrated to PopupMenu** — Duration and BPM now cycle in-place with LEFT/RIGHT; separate BPM+/BPM- rows removed.
### Fixes
- **Long messages no longer clipped** — message history and compose buffers were smaller than the over-the-air maximum, so long messages (and Polish text, where each accented char is two UTF-8 bytes) lost their tail; channel messages were worst because the sender name is embedded as `Name: body`. History, compose and keyboard buffers are now sized to `MAX_TEXT_LEN` (160 B), with per-field bounds kept on the smaller stores (custom messages, bot replies).
- **OLED joystick rotation** — enforce reset moved after prefs load, so stale e-ink rotation values no longer reverse joystick mapping on OLED builds (`FEAT_JOYSTICK_ROTATION_SETTING=0`).
- **First melody note duration** — preview-only side effect that shortened the first note in `playMelody()` no longer corrupts the stored sequence.
- **Home pages migration** — pages added in this release (Favourites, Trail) are appended to stored `page_order` instead of being hidden; SHUTDOWN is evicted from a full order to make room for required pages.
- **Pin picker fallback** — pressing `+` on an empty Favourites tile with no starred contacts and no recent DMs now lists all chat contacts instead of showing "No fav contacts".
- **Popup menus on OLED** — height-clamped to what fits on screen (max 4 items at 64 px), so long context menus no longer draw outside the panel.
- **Tools list scrolling** — the Tools menu now scrolls (with ▲/▼ indicators) so the added Compass entry stays reachable on the short OLED panel.
- **Trail action menu** — Grid toggle now also works with LEFT/RIGHT (not just ENTER); Export labels shortened to `Export (live)` / `Export (saved)` to fit.
- **E-ink default font** — unknown-character fallback rectangle aligned with the text cell baseline instead of one pixel below.
- **Build** — added `DisplayDriver::getBuffer`/`getBufferSize` virtuals so MyMesh no longer needs to know about concrete display types.
### Internal
- Shared `geo::` helpers (haversine, bearing, cardinal, distance formatting, `lat,lon` parsing) in `GeoUtils.h` and 1-px `gfx::` line/circle primitives in `GfxUtils.h`, replacing per-screen copies; a single `UITask::currentLocation()` GPS accessor used by every nav/compass/map screen.
- Prefs schema bumped to `0xC0DE0006` (`units_imperial`, `trail_show_pace`; the old combined `trail_units_idx` retired) — upgraders default to metric + speed.