From 2e6bb9cb83c25bf1337ceac41b17aef3d2ad2181 Mon Sep 17 00:00:00 2001 From: Nils Stinnesbeck Date: Sun, 25 Oct 2026 19:27:43 +0100 Subject: [PATCH] App 2.32.0: an ACC recorder that records every value the head unit offers The 2.31.1 log on the car showed the named assist properties constant while ACC was engaged behind another car: they are not fed. The recorder reads every property and vendor getter (read only, at most half the time busy) for 3 minutes, plus steering-wheel key broadcasts, and lists what changed, the rarest first. The recording is saved in the app and on a USB stick if one is plugged in. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01LhzAVaUyqcw5PkGjz4mWW6 --- AGENTS.md | 2 +- SPECS.md | 16 ++ app/build.gradle | 4 +- .../java/com/evsuite/abrp/AccRecorder.java | 182 ++++++++++++++++++ .../java/com/evsuite/abrp/AccRecording.java | 108 +++++++++++ .../java/com/evsuite/abrp/MainActivity.java | 18 ++ app/src/main/res/layout/pane_log.xml | 7 + app/src/main/res/values/strings.xml | 6 + .../com/evsuite/abrp/AccRecordingTest.java | 66 +++++++ 9 files changed, 406 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/evsuite/abrp/AccRecorder.java create mode 100644 app/src/main/java/com/evsuite/abrp/AccRecording.java create mode 100644 app/src/test/java/com/evsuite/abrp/AccRecordingTest.java diff --git a/AGENTS.md b/AGENTS.md index e13254d..3ef26ce 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -74,7 +74,7 @@ Repository: `ssh://git@git.stinnesbeck.com:2222/nils/mg4.git` (remote `origin`), | Live data | on/off, ABRP API key and user token, upload frequency | | Server | URL, pairing by QR, ingest token, installation ID (read-only), config import | | Settings | full screen, voice key, Overview style with the accent colour beside it, the Mascot character (only for that style) (offered only for styles drawn in it, `OverviewStyle.usesAccent`; Retro and Terminal add "Original" for their own palette, `hasOriginal`), tyre unit, battery, charging price, version, update check, install from USB, About | -| Logs | adaptive cruise control debug log (`CruiseLog`: the raw driver-assistance properties from `EVHardware.readAccDebug`, once a second; a line on change and every 2 s while driving; last 600 in a file), update log (every install step, with the platform's words), upload log | +| Logs | ACC recorder (`AccRecorder`/`AccRecording`: every property and vendor getter via `VendorSurfaceProbe.capture`, again and again for 3 minutes, plus steering-wheel key broadcasts; lists what changed, rarest first; saved to the app and a USB stick), adaptive cruise control debug log (`CruiseLog`: the raw driver-assistance properties from `EVHardware.readAccDebug`, once a second; a line on change and every 2 s while driving; last 600 in a file), update log (every install step, with the platform's words), upload log | Key classes (`app/src/main/java/com/evsuite/abrp/`): `AbrpUploadService` (foreground service, 15 s tick), `TelemetryUploader` (+ `TelemetryQueue`, persisted), `TelemetryPayload` (server diff --git a/SPECS.md b/SPECS.md index 402c5fb..cd8c5d1 100644 --- a/SPECS.md +++ b/SPECS.md @@ -131,6 +131,22 @@ tyre pressures, GPS (lat, lon, elevation, heading) and the is_* flags. It does * confirmed car facts, app structure, UI conventions, build/test/ship, documents. It replaces upstream's EVABRPUploader text. The test emulator is now in the flake: `nix run .#car-emulator` (Android 9 AOSP at 1920×720, 160 dpi; the car build installs as the system user — checked). +- 2026-10-25 — App 2.32.0 (branch `styles-retro-future`): the **ACC recorder** on the Logs tab. + The 2.31.1 log on the car (a drive with ACC engaged behind another car) showed every assist + property constant: `cc 0.00`, `ica 0`, `tja 1`, `sas 0`, `sam 0`, `obj 0.00`, `dist 0.00`, + `rel -128.00` (the field's minimum, i.e. no data). The `AAD_*` properties named in the head + unit's manager are not fed on this car. The recorder looks everywhere instead: for 3 minutes it + reads every value the head unit offers (`VendorSurfaceProbe.capture`: every CarPropertyManager + property and every value getter of the vendor objects, read only), waiting at least 2 s and at + least as long as the last capture took (at most half the time busy), and every + `com.saic.keyevent.hardkey.report` broadcast. `AccRecording` (pure, unit-tested) keeps the + first capture whole, then what changed and when, and per value how often and through which + values; the Logs tab shows the keys, then the changed values, the rarest first (the leads). + At the end the whole recording goes to `files/acc_recording.txt` and to the app's folder on + every removable volume (`Android/data//files/acc-recording-