48 lines
1.3 KiB
Markdown
48 lines
1.3 KiB
Markdown
# Ausiomixer HID Protocol
|
||
|
||
VID=`0x2E8A` PID=`0xA541`
|
||
Composite USB: **CDC** (debug printf) + **HID** (mixer reports), vendor usage page `0xFF00`.
|
||
|
||
## Input report (Pico → Host) — 8 bytes
|
||
|
||
| Offset | Field |
|
||
|--------|-------|
|
||
| 0 | `report_id = 1` |
|
||
| 1 | `enc1_delta` (int8) — scroll selection |
|
||
| 2 | `enc2_delta` (int8) — selected session volume steps |
|
||
| 3 | flags: bit0=E1 SW, bit1=E2 SW |
|
||
| 4 | pot `0..100` — system master |
|
||
| 5..7 | reserved |
|
||
|
||
## Output report (Host → Pico) — 64 bytes
|
||
|
||
| Offset | Field |
|
||
|--------|-------|
|
||
| 0 | `report_id = 2` |
|
||
| 1 | `session_count` |
|
||
| 2 | `selected_index` |
|
||
| 3 | `master_vol` `0..100` |
|
||
| 4 | `page_start` |
|
||
| 5 | `n_visible` (`0..4`) |
|
||
| 6 | `master_peak` `0..100` (VU) |
|
||
| 7.. | slots × `n_visible` |
|
||
|
||
Each slot (14 bytes): `vol` (1) + `peak` (1) + UTF-8 name (12, zero-padded).
|
||
|
||
Host pushes ~20 Hz while peaks/vols change.
|
||
|
||
## Controls
|
||
|
||
| Hardware | Action |
|
||
|----------|--------|
|
||
| Encoder 1 | Change selected session |
|
||
| Encoder 2 | Change volume of selected session (±2% per click on host) |
|
||
| Pot GP26 | Absolute master volume |
|
||
| SW | Logged (E1/E2); reserved |
|
||
|
||
## Run
|
||
|
||
1. Flash `build/ausiomixer.uf2`
|
||
2. `dotnet run --project host/Ausiomixer.Host`
|
||
3. Play audio in Windows; names + VU meters appear on the ILI9341 (320×240)
|