feat(ui-lvgl): roadmap stage 4 - tools grouped by context, Settings in L1 order, full status icons

- Map tools hold trail, live share and arrival alert, with their options
  (schema page "Map options") behind one button; back returns to the map
- Nearby gets an advert button: send now (nearby / everyone) + auto-advert
- Home page 3: Repeater, Admin (list of repeaters and room servers),
  Diagnostics
- Settings: display, sound, radio (Bluetooth, WiFi), system, keyboard,
  contacts & messages; units moved to Display & power
- Status bar: Bluetooth, GPS, alarm, mute, then auto-advert, trail, live
  share, repeater, arrival alert in the accent colour
- Fonts: key and route glyphs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-09-26 09:14:58 +02:00
co-authored by Claude Opus 5.5
parent 331a4e64c4
commit 087bac89b4
16 changed files with 562 additions and 300 deletions
+30 -9
View File
@@ -8,7 +8,7 @@ Confirmed on the device: live share sends and receives positions.
- [ ] Map: ☰ tools moved to the left column (back, pin, ☰); nothing overlaps the crosshair
- [ ] Target ring sits exactly on the marker (all markers were drawn ~3 px low)
- [ ] A person sharing on a channel, picked as target, is followed as they move (was a fixed point where they were); bar shows the person icon
- [ ] Settings: "Trail, live share, alerts" subtitle no longer covers the title (all list rows)
- [ ] Settings: subtitles no longer cover the titles (all list rows)
- [ ] Map credit is a small "©" (tap: full line in a toast); full text also in Settings > About; long toasts wrap
- [ ] Home: Messages, Nearby, Map, Settings — "Map" is the navigation map; the nodes map opens from Nearby's header (map icon), back returns to Nearby
- [ ] Home tiles are wider; more apps will go on further swipeable pages (dots appear once there are two)
@@ -66,6 +66,17 @@ Confirmed: green dot inside the ring, waypoints much better, download works, set
- [ ] Room server login from the phone app / L1 still works while this exists (only admin logins go to the new session)
- [ ] L1 (ui-new): Tools > Admin works as before (login, saved password, typed values, confirm reboot); it now also skips the login for the node you just used
## Roadmap stage 2: Arduino-ESP32 3.3.12 / IDF 5.5 (2026-09-26)
Env `Wio_Tracker_L2_companion_solo_lvgl_v3` (flash with `L2_ENV=Wio_Tracker_L2_companion_solo_lvgl_v3`). Bluetooth runs on NimBLE now, the speaker on the new I2S driver. Internal heap at runtime: 147.9 KB free on 3.x vs 147.8 KB on 2.0.17 (large UI buffers moved to PSRAM; static RAM 109 → 71 KB).
- [ ] Boots, screen and touch as before; WAKE and USER buttons
- [ ] Bluetooth: the app pairs with the PIN (asks for it: the link is encrypted), connects, syncs contacts and messages, sends; reconnects after the app is closed / reopened; the Bluetooth switch still works
- [ ] Sound: startup chime, message sounds, melody editor, volume; no new knocks
- [ ] LoRa: send / receive on a channel and a DM, adverts
- [ ] GPS fix, map, trail drawn on the map (its buffers moved to PSRAM)
- [ ] WiFi: scan, map download over HTTPS; the WiFi switch
- [ ] SD card: maps load, trail GPX export
- [ ] Settings / contacts / channels survive the update from the 2.0.17 build (same flash layout)
## Roadmap stage 1: quick fixes (2026-09-26)
- [ ] Keyboard: the keyboard key (bottom left) closes it; in a chat the typed text stays, in a dialog nothing is saved
- [ ] Symbols page ("1#"): "_" is in the third row now
@@ -79,7 +90,7 @@ Confirmed: green dot inside the ring, waypoints much better, download works, set
- [ ] Chat "+" (left of the text field): Insert {loc} / {time} / {batt} (+ sensors) into the message; they are filled in when sent (a reply's "@[name] " stays as typed)
- [ ] Chat "+" > a quick message sends it at once (the popup shows what will go out, filled in); "Edit quick messages" opens the list
- [ ] Settings > Messages & contacts > Quick messages: 10 slots, tap to edit (field, placeholder chips, keyboard); empty clears; "OK" is there on a fresh device; the same slots as L1's Settings > Messages
- [ ] Settings > NODE > Send advert: Nearby only (zero-hop) / Everyone (flood through repeaters); another node sees you
- [ ] Nearby > advert button (tower icon) > Nearby only (zero-hop) / Everyone (flood through repeaters); another node sees you
- [ ] Settings > CONNECTIVITY > Bluetooth: off / on; the row shows the pairing PIN while waiting, "the app is connected" when paired; USB keeps working with Bluetooth off; after a reboot Bluetooth is on again (as on L1)
- [ ] Messages: "Read all" in the header while anything is unread
- [ ] Nearby > a node with a position: flag button saves it as a waypoint; pin button puts a contact on the favourites dial; with five or more buttons they show icons only; delete asks with "trash?" and a toast
@@ -119,10 +130,10 @@ The speaker plays through the ES8311 codec (I2S MCLK 10 / BCK 11 / WS 12 / DOUT
- [ ] Settings > Display & power > TIME > Clock seconds off: Home and lock screen clocks show HH:MM; on: HH:MM:SS
## New: Diagnostics, auto-advert, compass (2026-09-25)
- [ ] Settings > SYSTEM > Diagnostics: tabs Live / System / Font; Live counters (uptime, rx/tx, heap, noise floor, RSSI/SNR, queue, errors) tick every second
- [ ] Home > Diagnostics (page 3): tabs Live / System / Font; Live counters (uptime, rx/tx, heap, noise floor, RSSI/SNR, queue, errors) tick every second
- [ ] Live > Reset → confirm popup → "Counters reset", rx/tx and forwarded go back to 0
- [ ] System shows firmware, build date, board, node name, frequency / SF / BW / CR, TX power; Font shows Polish, Greek and Cyrillic samples without boxes
- [ ] Settings > Trail, live share, alerts > LIVE SHARE > Auto-advert 30 s: another node sees your advert (with position) every ~30 s; Off stops it; survives a reboot
- [ ] Nearby > advert button > AUTOMATIC > Auto-advert 30 s: another node sees your advert (with position) every ~30 s; Off stops it; survives a reboot
- [ ] L1: Tools › Auto-Advert shows the value set on L2 (same pref), Tools › Diagnostics unchanged
- [ ] Home page 2 > Compass: without a fix "Waiting for a GPS fix" (GPS off: hint to turn it on); standing still "Move to set the heading"; walking: dial turns so your course is under the amber pointer, degrees + cardinal on the right
@@ -198,9 +209,9 @@ The speaker plays through the ES8311 codec (I2S MCLK 10 / BCK 11 / WS 12 / DOUT
- [ ] ✕ on the bar clears the target
- [ ] Waypoint menu (pencil): Go / Name (Polish letters, 11-byte limit) / Share / Delete (second tap confirms)
- [ ] Share → Messages → pick a conversation → compose holds `[WAY]lat,lon name` → send; a Solo L1 receiving it can save it
- [ ] Settings > Trail, live share, alerts > "Show others' positions" on → someone's `[LOC]` share appears on the Map and in the list; tap → navigate to them
- [ ] Map > ☰ > Options > "Show others' positions" on → someone's `[LOC]` share appears on the Map and in the list; tap → navigate to them
- [ ] Node detail (a node with a position) has the compass button → Map with that node as target
- [ ] Settings > … > "Arrival alert" on + target set → toast "Arrived: …" when you get within the radius
- [ ] Map > ☰ > Options > "Arrival alert" on + target set → toast "Arrived: …" when you get within the radius
## Positions in messages
- [ ] A received message with `[WAY]lat,lon name`, `[LOC]lat,lon` or plain "lat, lon" shows Go / Save under the bubble
@@ -209,7 +220,7 @@ The speaker plays through the ES8311 codec (I2S MCLK 10 / BCK 11 / WS 12 / DOUT
## Trail & live share (Map > ☰ tools button, left column)
- [ ] Record → pill "REC 0 m" at the top; walk: blue trail line follows, distance grows
- [ ] Auto-pause (Settings > Trail, live share, alerts): standing still → "PAUSED", walking resumes
- [ ] Auto-pause (Map > ☰ > Options): standing still → "PAUSED", walking resumes
- [ ] Stop / Save / Load / Reset (second tap confirms) behave; a trail saved on L2 loads (same /trail file as L1)
- [ ] Export GPX → toast "Saved trails/trail-YYYYMMDD-HHMM.gpx"; the file opens in a GPX viewer (track + waypoints)
- [ ] Live share: pick "Send to" (channel or favourite), Share live → pill "LIVE 1h00"; another node sees the [LOC] updates while you move; stops by itself after the chosen time
@@ -218,8 +229,8 @@ The speaker plays through the ES8311 codec (I2S MCLK 10 / BCK 11 / WS 12 / DOUT
- [ ] ☰ > Download this area opens the download popup
- [ ] Waypoint averaging 5 s/10 s/30 s: pin → "Averaging GPS… n s" pill (tap cancels) → waypoint saved at the mean
## Settings > Trail, live share, alerts (schema-driven)
- [ ] Every row changes and survives a reboot; "Imperial units" relabels point spacing and distances
## Map > ☰ > Options (schema-driven)
- [ ] Every row changes and survives a reboot; Settings > Display & power > "Imperial units" relabels point spacing and distances
- [ ] Changing "Stop sharing after" during a session restarts its clock
- [ ] Radius / Alert on (arrive, leave, both) change when the arrival toast fires
@@ -230,3 +241,13 @@ The speaker plays through the ES8311 codec (I2S MCLK 10 / BCK 11 / WS 12 / DOUT
- [ ] L1: Tools › Trail Save / Load / Reset still work (now via TrailEngine)
- [ ] L1: Mark with averaging (Trail › Settings › Mark avg) still counts down and marks
- [ ] L1: Track back still advances along the trail and ends at the start
## Roadmap stage 4: UI layout (2026-09-26)
- [ ] Home page 3: Repeater, Admin, Diagnostics tiles open their screens; back (arrow or USER button) returns to Home
- [ ] Home > Admin: repeaters and room servers listed, favourites (star) first; tap → login / admin tabs; back leaves to the list; with none heard yet a short note instead
- [ ] Settings order like L1: DISPLAY (Display & power), SOUND, RADIO (Radio, Bluetooth, WiFi), SYSTEM (Name, GPS, Reboot, Power off), KEYBOARD, CONTACTS & MESSAGES, ABOUT; no Repeater / Diagnostics / Send advert / trail rows left there
- [ ] Settings > Display & power: UNITS section with "Imperial units"
- [ ] Map > ☰ "Map tools": TRAIL, LIVE SHARE, ARRIVAL ALERT (On/Off with mode and radius), MAP; "Options: trail, sharing, alert" opens Map options; back returns to the map
- [ ] Nearby header: back, title, advert (tower), map, sort, scan (refresh icon) -- nothing overlaps; advert popup sends Nearby only / Everyone and sets Auto-advert
- [ ] Status bar, right to left next to the battery: Bluetooth (grey on, white with the app), GPS (grey searching, green fix), bell (alarm set), mute, then amber: auto-advert (tower), trail (route), live share (pin), repeater (loop), arrival alert (flag, with a target); each appears / disappears within a second of switching it
- [ ] All icons at once still leave the clock readable on the left
+25 -11
View File
@@ -25,16 +25,22 @@ Decisions already made:
## 2. Arduino-ESP32 3.x, PSRAM
- [ ] A separate L2 env on pioarduino (as `esp32c6_base`); the 2.0.17 env
stays until the new one passes the hardware checklist.
- [ ] Port: speaker (new I2S driver), BLE, ESP-NOW, HTTPS map download,
LovyanGFX.
- [ ] Large buffers in PSRAM: message history, trail, tile cache. Measure
internal RAM before / after.
- [x] A separate L2 env on pioarduino 55.03.312-1 (Arduino-ESP32 3.3.12,
IDF 5.5): `Wio_Tracker_L2_companion_solo_lvgl_v3`; the 2.0.17 env stays
until the new one passes the hardware checklist.
- [x] Port: speaker (new I2S driver), BLE (NimBLE), ESP-NOW (IDF 5 callbacks);
HTTPS map download and LovyanGFX build unchanged (check on the device).
- [x] Large buffers in PSRAM (`psramBuf`): trail drawing, tile cache, map
marks, list rows, keyboard maps, message metadata. Internal heap free at
runtime: 2.0.17 147.8 KB; 3.x 128.2 KB before, 147.9 KB after (static RAM
109 → 71 KB). Measured with `-D UI_HEAP_REPORT`. History and a larger
trail come to PSRAM with stage 3.
- [ ] Full hardware checklist, then make the new env the default.
## 3. Data on the SD card
Postponed (2026-09-26): the user may extend this stage first.
- [ ] Message history on SD, kept across reboots (~100 per conversation;
the newest ones cached in PSRAM).
- [ ] Trail sized to the device: thousands of points in PSRAM (now 512),
@@ -42,11 +48,19 @@ Decisions already made:
## 4. UI layout
- [ ] Every tool as its own Home tile (trail, live share, arrival alert,
repeater, admin, diagnostics, ...), not inside Settings.
- [ ] Settings in a sensible order, as on the original (L1).
- [ ] Every status icon the original has (BT, GPS, live share, trail,
repeater, alarm, mute, arrival alert, ...).
L1 splits its tools into many small screens because of the joystick and the
128x64 display; the L2 groups them where they are used instead.
- [x] Tools: trail, live share and arrival alert stay in the map (its tools
popup, with their options behind "Options"); the advert (send now,
auto-advert) is in Nearby; Repeater, Admin (a list of repeaters and
room servers) and Diagnostics are Home tiles next to Favourites,
Compass, Clock and Bot. The melody editor stays in Sound.
- [x] Settings in L1's order: display, sound, radio (with Bluetooth, WiFi),
system, keyboard, contacts & messages.
- [x] Every status icon L1 has (Bluetooth, GPS, alarm, mute, auto-advert,
trail, live share, repeater) plus arrival alert; background modes in
the accent colour instead of L1's blinking.
## 5. Security and internet
File diff suppressed because one or more lines are too long