Record the measured USB link: NCM, bind to Ethernet, keep awake

Tested against the car Orin: the tablet is USB host to the Orin's NCM
gadget (192.168.55.1). Android routes app traffic over it only when it
is the default network, so the app must bind to TRANSPORT_ETHERNET. PD
changes cost ~3 s, and an idle tablet off charger sleeps and goes
silent, so the app keeps the device awake. Two guidelines follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mikkeli
2026-10-09 16:08:28 +09:00
parent a79b4ef9d3
commit c1ffba08fb
2 changed files with 36 additions and 6 deletions
+27 -5
View File
@@ -1,7 +1,7 @@
---
type: plan
status: active
updated: 2026-09-04
updated: 2026-10-09
---
# Initial plan
@@ -19,9 +19,9 @@ needs no routing engine at all. Routing is the expensive last fraction.
## Open
- **Transport.** Over USB the tablet has an IP link via RNDIS, so it can reach the
broker directly. Whether it should, or should go through `svc-gw`, is decided in
that repo — see its initial plan.
- **Transport.** Whether the app reaches the broker directly or goes through
`svc-gw` is decided in that repo — see its initial plan. The physical link is
settled (below).
- **CJK labels.** MapLibre cannot ship Japanese glyph sets as SDF ranges. Local
font rendering must be configured, or labels will be slow or absent.
- **Sunlight.** A typical tablet is unreadable through a windscreen in daylight.
@@ -38,7 +38,29 @@ Two channels with different guarantees, not one socket:
| On reconnect | expect current state immediately | resend anything pending |
This client always initiates and owns reconnection — the Orin never dials out.
Assume the link drops constantly: cable knocked, screen off, WiFi lost.
Assume the link drops constantly: cable knocked, screen off, power changes.
## The USB link, as measured (2026-10-09)
Tested with the actual tablet (Redmi Pad SE 8.7 4G, Android 16) against the car
Orin. Details: [USB tablet link report](gitea:yukart/orin-nano-env-setup).
- **Physical:** tablet USB-C → PD hub (charging from the car) → Orin's USB-C port.
The tablet is the USB host; the Orin is a USB network gadget. The tablet picks
**NCM** and gets `192.168.55.100`; the Orin is **`192.168.55.1`**.
- **Android won't route over it by default.** The link has no internet, so it never
becomes the default network while WiFi or cellular is up, and ordinary sockets go
elsewhere. Verified: the Orin was unreachable until WiFi and cellular were off.
The app must request the Ethernet network (`ConnectivityManager.requestNetwork`
with `TRANSPORT_ETHERNET`) and bind its sockets to it.
- **About 3 s blank per power change.** Cutting the hub's PD costs ~3.5 s (full
USB detach); restoring it ~2.2 s. Ignition and cranking produce these.
- **An asleep tablet is a dead link.** Off charger and idle, Android suspends about
a minute after screen-off and answers nothing, while the Orin still sees the USB
link up. The app keeps the device awake while it is the display (screen-on flag
in the full UI; the same for any overlay widget).
- Reconnect without user action, and expect the Orin to drop a silent client by
heartbeat (project-yukart decision 24).
## Session marking is worth building early