feat: USB OTG CDC-ACM with custom VID:PID, disconnect UX

Switch all ESP32-S3 boards from UsbSerialJtag to USB OTG CDC-ACM via
embassy-usb. The USB device stack is now shared code — boards only
provide the platform-specific embassy-usb Driver.

- Custom VID:PID 1209:5741 (open-source VID, "WA" PID)
- CDC-ACM class with proper device enumeration
- COBS+postcard protocol over CDC-ACM packet read/write
- Concurrent USB device loop + protocol loop via join()
- On disconnect: sends DisplayCommand::Reset to show "Waiting for host..."
- Justfile: espflash no longer uses --monitor (OTG steals PHY)
- Test script updated to detect by new VID:PID

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
swaitsandClaude Opus 4.6 committed 2026-03-29 20:42:56 -06:00
1 parent 78b0c25040
commit 4e7e6d2167
9 files changed
+113 -46

No files matched your search

+7
View File
@@ -120,6 +120,13 @@ pub async fn display_task(
state.display_on = true;
render_and_flush(&mut display, &state).await;
}
DisplayCommand::Reset => {
state.last_status = RadioStatus::default();
state.rssi_history = [NO_SIGNAL; RSSI_HISTORY_LEN];
state.rssi_count = 0;
state.current_slot_rssi = NO_SIGNAL;
render_and_flush(&mut display, &state).await;
}
},
Either3::Third(()) => {
// Timer tick: advance sparkline slot