|
3 | 3 | An independent, open-source Android app to fully control the **Google Pixel Buds |
4 | 4 | Pro 2** without the official Pixel Buds app or Google Play Services. |
5 | 5 |
|
6 | | -> **Status:** protocol-reconstruction phase. There is no application code yet — no |
7 | | -> Gradle project or module skeleton has been created (see `TODO.md` Phase 4). The |
8 | | -> protocol knowledge itself, however, has matured well beyond "early research": ANC |
9 | | -> mode switching, Find My Buds (Left/Right), battery reporting (via HFP), and the |
10 | | -> equalizer's live-write path are all confirmed 🟢 FACT and implementation-ready |
11 | | -> (`PROTOCOL.md`, `DECISIONS.md`). See `TODO.md` for the current task list and |
12 | | -> readiness assessment. |
| 6 | +> **Status:** protocol reconstruction is mature, and Android app development has begun. ANC mode |
| 7 | +> switching, Find My Buds (Left/Right), battery reporting (via HFP), and the equalizer's live-write |
| 8 | +> path are all confirmed 🟢 FACT and implementation-ready (`PROTOCOL.md`, `DECISIONS.md`). A real, |
| 9 | +> building, unit-tested Android Studio project now exists at [`android/`](./android) — five Gradle |
| 10 | +> modules, ANC's `FrameEncoder`/`FrameDecoder` implemented and tested against real capture bytes, a |
| 11 | +> working Hilt-wired composition root — but it has **no UI screens for real device control yet** and |
| 12 | +> has **never been run against real Pixel Buds hardware** (see `TODO.md` Phase 4 for exactly what's |
| 13 | +> done vs. still open). |
13 | 14 |
|
14 | 15 | > ## ⚠️ Disclaimer: hardware risk |
15 | 16 | > |
@@ -47,26 +48,37 @@ the Pixel Buds Pro 2 first has to be reconstructed through Bluetooth traffic |
47 | 48 | analysis and reverse engineering of the Android APK. That knowledge is then used |
48 | 49 | to design, implement, test, and document a native Android app. |
49 | 50 |
|
50 | | -## Current state (2026-09-08) |
| 51 | +## Current state (2026-09-13) |
51 | 52 |
|
52 | | -- **Captures:** 42 registered sessions (`CAP-001`–`CAP-042`), most analyzed and a handful still |
53 | | - planned — see `CAPTURE_BLUETOOTH_HCI_SNOOP.md` §9's Capture Index. |
| 53 | +- **Captures:** 52 registered sessions (`CAP-001`–`CAP-052`), most analyzed and a handful still |
| 54 | + planned — see `CAPTURE_BLUETOOTH_HCI_SNOOP.md` §9's Capture Index. A full, independent, |
| 55 | + non-sampled re-derivation of every finding from an earlier full-catalog review found the core |
| 56 | + protocol-decode content held up with zero errors (`ai-sessions/0012_CROSSCHECK_RESULT_2026_09_12.md`). |
54 | 57 | - **APK analysis:** one companion-app version fully pulled, decompiled, and analyzed |
55 | 58 | (`v1.0.955078536-10253511`) — see `reverse-engineering/APK_VERSIONS.md`. DLCI 0x04/0x08's own |
56 | 59 | transport code was not found anywhere in it (`DECISIONS.md` ADR-025) — both channels are |
57 | 60 | implemented from wire-capture evidence alone, not by decompiled-code cross-reference. |
58 | | -- **Decisions:** 25 recorded architecture/protocol decisions (`DECISIONS.md`), every |
59 | | - 🟢 FACT promotion in `PROTOCOL.md` traceable to an explicit maintainer sign-off. |
| 61 | +- **Decisions:** 29 recorded architecture/protocol decisions (`DECISIONS.md`), every |
| 62 | + 🟢 FACT promotion in `PROTOCOL.md` traceable to an explicit maintainer sign-off. The three |
| 63 | + previously-open architecture questions are now all decided: dependency injection is **Hilt** |
| 64 | + (ADR-028), minimum supported Android API is **34/Android 14**, matching compile/target SDK |
| 65 | + (ADR-029), and Find My Buds for the Case/"both simultaneously" is an explicit, permanent v1 |
| 66 | + non-goal (ADR-027, Zero-GMS scope limit — see `PROJECT.md`). |
60 | 67 | - **Confirmed and implementation-ready:** ANC/Transparency/Adaptive mode switching, |
61 | 68 | Find My Buds (Left/Right), battery reporting (HFP), the equalizer's live-write |
62 | 69 | path, touch-controls top-level toggle and press-and-hold assignment, mono audio, |
63 | | - multipoint, volume EQ, volume balance, and the "Bud return" case sound. |
| 70 | + multipoint, volume EQ, volume balance (including its Left/Right polarity, ADR-026), |
| 71 | + and the "Bud return" case sound. |
64 | 72 | - **Still open:** touch-controls' head-gestures and ANC-mode-rotation sub-features, |
65 | | - in-ear detection, EQ preset persistence semantics, Find My Buds for |
66 | | - the case (a Zero-GMS scope question, not just a research gap), and per-component |
| 73 | + in-ear detection, EQ preset persistence semantics, and per-component |
67 | 74 | serial-number reading. |
68 | | -- **Not started:** the Android app itself — no Gradle project exists in this |
69 | | - repository yet. |
| 75 | +- **App development has started** — see [`android/`](./android): five Gradle modules |
| 76 | + (`:app`, `:ui`, `:domain`, `:data`, `:hardware`), a Hilt-wired `:app` composition root, and ANC's |
| 77 | + `FrameEncoder`/`FrameDecoder` implemented and unit-tested against real, `tshark`-extracted capture |
| 78 | + bytes (`./gradlew assembleDebug test` builds a real debug APK, all unit tests passing). **Not yet |
| 79 | + done:** any UI screen for actually controlling the Buds, a real `BluetoothSocket`-backed transport |
| 80 | + verified against hardware, and EQ/Battery/Find-My-Buds codecs (`:data` has ANC only so far) — see |
| 81 | + `TODO.md` Phase 4 for the exact, up-to-date checklist. |
70 | 82 |
|
71 | 83 | ## Approach |
72 | 84 |
|
@@ -143,11 +155,11 @@ humans and AI coding assistants working on it: |
143 | 155 | | `AI_SESSION_LOG_PROCEDURE.md` | Naming scheme, category vocabulary, and numbering discipline for logging AI-agent prompts/results into `ai-sessions/` | |
144 | 156 | | `ai-sessions/INDEX.md` | Registry of every logged AI-agent prompt/result pair under `ai-sessions/` — check before assigning the next number | |
145 | 157 | | `scripts/lint_docs.py` | Grep-based doc lint (dead filenames, unregistered IDs, stale project name) — run before committing a doc change | |
| 158 | +| `android/` | The Android Studio project itself (five Gradle modules: `:app`, `:ui`, `:domain`, `:data`, `:hardware`) — see the "Current state" section above for what's implemented so far | |
146 | 159 |
|
147 | 160 | ## Target platform |
148 | 161 |
|
149 | | -- Compile/target SDK: API 34 (Android 14) |
150 | | -- Minimum supported Android API: **TBD** (see `ARCHITECTURE.md` §15) |
| 162 | +- Compile/target/minimum SDK: **API 34 (Android 14)** — `DECISIONS.md` ADR-029 |
151 | 163 | - Primary reference OS: GrapheneOS, with compatibility maintained for stock |
152 | 164 | AOSP-based ROMs |
153 | 165 |
|
|
0 commit comments