docs: M7 now-playing telemetry is Pi-side AVRCP broadcast, no Android app needed

This commit is contained in:
Mathieu Moran
2026-08-15 19:26:23 -04:00
parent 27ecc5492a
commit 749feeb9d5
+22 -23
View File
@@ -290,34 +290,33 @@ Add M6 later as an optimization for Spotify specifically.
--- ---
### Phase M7: Android Auto "now playing" telemetry readout (stretch goal) ### Phase M7: Idle "now playing" telemetry broadcast (stretch goal)
**Goal:** Show live OBD values (speed, RPM, coolant) on the portable CarPlay/Android Auto **Goal:** Show live OBD values (speed, RPM, coolant) on the car radio's display using the
screen. The 9.26" display only runs CarPlay/AA — it has no Android app surface — so the only Bluetooth link that M1-M6 already establishes — **no Android Auto, no extra app.** When
viable path is a templated AA app that spoofs media metadata (the "now playing field" trick). nothing is playing, the Pi's A2DP source broadcasts live telemetry as the AVRCP track
metadata, so the radio's "now playing" field shows the gauges instead of a song.
- [ ] Register the yaris-obd Android app as an Android Auto **media** app - [ ] When the audio pipeline is idle (no phone A2DP stream, loopback inactive), have the
(`CarAppService` + `MediaSession`) — Fermata Auto / OBD2AA style. Pi's BlueZ `org.bluez.MediaPlayer1` (source side, facing the radio) emit a synthetic
- [ ] Push live values into the now-playing fields, refreshed every 1–2 s from the Pi's track:
`/api/obd/status` (or a new lightweight endpoint):
- Title: `87 km/h` - Title: `87 km/h`
- Subtitle: `RPM 2400 · Coolant 90°C` - Artist: `RPM 2400 · Coolant 90°C`
- [ ] One APK, two surfaces: the full Compose app stays on the phone; the AA surface is a - [ ] Refresh the metadata every 1–2 s from `modules/app_obd.py` (speed, RPM, coolant)
separate templated screen. via a lightweight DBus call — no new hardware, no new app.
- [ ] The moment real audio starts (phone stream appears / loopback goes active), swap the
metadata back to the real track (Title/Artist relay from M2).
**Constraints:** **Constraints:**
- **No gauges** — AA only exposes templated text/buttons; this is a text readout, not a - **Text only** — the radio shows whatever fields it supports (usually Title/Artist/Album);
gauge cluster. this is a text readout, not a gauge cluster.
- **WiFi conflict** — wireless AA owns the phone's WiFi, so it can't also be on the Pi - **Radio-dependent** — the car radio must display AVRCP metadata (Q5); otherwise the
hotspot. Requires **wired AA** (USB) so WiFi stays free for the Pi, or real-time OBD readout is invisible. The portable 9.26" CarPlay/AA screen already satisfies this.
pushed via the server over cellular (adds latency + load). - **No conflict** — unlike an Android Auto app, this rides the existing A2DP link, so there
- **Distribution** — custom AA apps need Google Play review (unlikely to approve) or a is no WiFi conflict, no Play review, no distribution problem.
whitelist patch (`aa-rs`/root/ADB); AAAD only installs its fixed list and Google patches
these routes regularly.
- **Driver safety** — AA is templated and driver-safety-limited; treat as a parked/glance
readout.
**Note:** this phase is Android-side (lives in `android/`), unlike M1-M6 which are **Note:** this is Pi-side (lives in `modules/app_mediacenter.py`), consistent with M1-M6.
Pi-side. It lands under the same "media center" umbrella the car converges on. It also makes the telemetry readout work on the portable CarPlay/AA screen **without** any
Android Auto app — the Pi is the "player" from the radio's perspective.
--- ---