feat(route): trace per link, to the node or the last repeater, find where it stops; channel order re-sorts on entry

Core: PathEditor results are links (node k hearing k-1 and back); toNode()
off traces only the repeaters (a companion answers only with repeat on);
probe() traces to each repeater in turn after no reply; failures carry a
reason; an empty list saves "direct". PingEngine takes over a slot left past
its timeout. A kept route: the dropped heard path isn't announced to the app
nor bumps lastmod; an app update keeps the flag only if it leaves the route.
Marker boxes sized for every dot and name (overflow).

ui-lvgl Route: one line per node with out / back dB coloured by quality, tap
a hop to move / remove, tap the node to include it, Keep in the header, Find
where beside a no-reply status. ui-new Path: To node / Find break rows,
result alerts, cursor kept on its action.

Channels: ui-new re-sorts the list on entering it, cursor on the same channel.
Docs: Path and trace, Channel order. Sim hooks: open route, add channel,
open messages.

Checked in the browser sim (L2 + ui-new peer + repeater); not on hardware.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-10-14 11:20:55 +02:00
co-authored by Claude Opus 5.5
parent 24dd025086
commit 120ddfc830
17 changed files with 701 additions and 256 deletions
+31
View File
@@ -19,6 +19,7 @@ for what you can do with it:
| Save waypoint, Set as target | Its position as a waypoint, or as the [Locator](./navigation.md#locator) target |
| Fav, Pin to dial | Favourite, or a place on the Favourites page |
| Telem | What this contact may ask for: None, Status, Stat+loc, Stat+sens, All. Shown when a [Privacy](./settings.md#privacy) setting is **Allowed** |
| Path / trace | The route to the node: edit it, trace it, save it (below) |
| Reset path | Forgets the learned route; the next message floods and finds a new one. Shown when there is a route |
| Share nearby | Sends the contact's last advert to the nodes in direct range, so they can add it |
| Admin | Remote admin, for a repeater or room (below) |
@@ -38,6 +39,36 @@ back out, **Enter** opens its details and **Hold Enter** its options.
> isn't a contact yet and **Delete**. The telemetry permissions are three
> switches under **Can ask for**.
## Path and trace
**Path / trace** in a contact's options shows the repeaters its messages go
through, in order, and the node at the end. **+ Add repeater** picks one from
the Nodes list, **Enter** on a hop moves or removes it, and **Left / Right**
moves it up or down.
**Trace** sends a trace along the route and back the same way. Each node
answers with how well it heard the one before it, so every hop shows two
numbers in dB: the way out and the way back. Only a node that repeats can
answer: repeaters do, companions only with repeat on. **To node** off traces
just the repeaters, which still tells you whether the way to the node is good.
With no reply, **Find break** traces to the first repeater, then the second,
and so on, and shows where it stops. If every repeater answers, the node
itself didn't.
**Save path** makes the list the contact's route; saved empty, messages go
straight to the node. The route a node sends back usually replaces it again;
**Keep path** stops that, and keeps the route after failed sends too.
**Reset path** forgets it, keep included.
> [!NOTE]
> **Wio Tracker L2:** **Route** in a node's card. Each repeater and the node
> take one line, with the link's out / back dB on the right: green when good,
> amber when fair, red when weak. Tap a repeater to move or remove it, tap
> the node to trace to it or stop at the last repeater. **Keep** is in the
> header, **Find where** appears next to a "No reply". The repeaters can also
> be tapped on the map, in order (**Map**); **Undo** takes the last one out.
## Your own contact
**Status › System**, **Enter** shows your contact as a QR code: the phone