budctl832675a
Verification log: A4, and the Android plan is done
budctl status on the laptop works while the Android app is connected, not only after it lets go: with dual connection on, the T310 gives each host a control link of its own (the owner's report, no log). With A4, every step and checkpoint of docs/android.md is done; 0.1.4 carries the app, and the other control app is gone from the phone.
+7 −2
3 files changed
- M CLAUDE.md +1 −1
- M docs/android.md +5 −1
- M docs/protocol/realme_t310.md +1 −0
| @@ -114,7 +114,7 @@ Exit codes: | |||
| 114 | 114 | 10. ~~fit test~~ (dropped: the T310 acks it but runs no test) | |
| 115 | 115 | 11. custom EQ | |
| 116 | 116 | 4. **GUI** (`budctl-gui`, see [GUI](#gui)): first the look, with demo data; then the keys; then the live connection; then the pages, one at a time. | |
| 117 | − | 5. **Android app** (`docs/android.md#steps`): a Kotlin app with budctl-core inside, to replace the other control app on the owner's phone. First the core builds for Android and the session worker moves into core; then the JNI crate, the Bluetooth link and a plain screen (phone checkpoints A1, A2); then the pages, one at a time. | |
| 117 | + | 5. **Android app** (`docs/android.md#steps`): done in 0.1.4. A Kotlin app with budctl-core inside, replacing the other control app on the owner's phone: every desktop page, released as a signed `budctl.apk`, phone checkpoints A1–A4 passed. | |
| 118 | 118 | 6. **More devices**: as acquired. | |
| 119 | 119 | ||
| 120 | 120 | ## GUI | |
| @@ -7,6 +7,9 @@ app. | |||
| 7 | 7 | This file is the plan. Each step says when it is done. The phone checkpoints go into the | |
| 8 | 8 | [verification log](protocol/realme_t310.md#verification-log), like the desktop app's. | |
| 9 | 9 | ||
| 10 | + | **Done** (2026-11-02): every step, and every checkpoint passed. Release 0.1.4 carries the app as | |
| 11 | + | `budctl.apk`, and the owner has removed the other control app from the phone. | |
| 12 | + | ||
| 10 | 13 | ## Why Kotlin as well as Rust | |
| 11 | 14 | ||
| 12 | 15 | - Android has no BlueZ, and apps cannot open the kernel Bluetooth sockets that | |
| @@ -184,7 +187,8 @@ Run on the phone with debug on, and paste the in-app log. | |||
| 184 | 187 | after the last command, and when the app leaves the screen. | |
| 185 | 188 | - **A3:** each page's writes, as G3–G8 were for the desktop app. | |
| 186 | 189 | - **A4:** take turns between the phone app and `budctl status` on the laptop. Each gets the | |
| 187 | − | channel once the other has let go. | |
| 190 | + | channel once the other has let go. (On the T310 with dual connection on, both work at once: | |
| 191 | + | each host has a control link of its own.) | |
| 188 | 192 | ||
| 189 | 193 | <a id="decisions"></a> | |
| 190 | 194 | ## Decisions | |
| @@ -618,6 +618,7 @@ The owner will not install realme Link (2026-10-27), so there is no app capture. | |||
| 618 | 618 | ||
| 619 | 619 | | Date | Checkpoint | Result | Notes | | |
| 620 | 620 | |---|---|---|---| | |
| 621 | + | | 2026-11-02 | A4 Android app (v0.1.4) and `budctl status` on the laptop | pass (owner's report) | `budctl status` on the laptop works while the Android app is open and connected, not only once the app has let go: with dual connection on, the T310 gives each host a control link of its own, as with a phone app on 2026-10-27. No log was taken of this run | | |
| 621 | 622 | | 2026-11-01 | A3 Android app, Gestures and Earbud settings pages | pass | Right double tap set to `none` and back to `play-pause`, each written (`0x0401`) and read back in about 1 s. Six hold-cycle writes (`0x0404 02 01`), each acked and read back in 0.25-1.8 s, ending at off → anc as before. Ring and Stop (`0x0400 01`/`00`) acked; the buds rang. The devices list showed. The owner confirmed it all on screen | | |
| 622 | 623 | | 2026-11-01 | A3 Android app, Equalizer page: built-in presets, the custom one, its bands, a new preset, a delete | pass | Each built-in preset (`0x0406`) and the custom one were put in use and read back in 0.25-0.45 s. Fifteen band saves on `custom-4` were each acked and read back in 0.4-0.7 s; bands moved while a save was on its way went out as soon as it was answered, the latest winning. "New preset" created `custom-5` and opened its bands, five saves went to it, and the bin deleted it. Rename was not tried on the phone | | |
| 623 | 624 | | 2026-11-01 | A3 Android app, Overview page | pass, in part | Noise cancelling → off → noise cancelling, each acked and read back in about 0.25 s; game mode on → off; Refresh; the dual-connection question (cancelled) and the colors switch. Transparency, the strength (light, medium) and the bass level were not tried on the phone: W1, W2 and W6b cover their bytes, but the app's bass write, sent when the finger lifts, is still to try | | |