feat: UAC USB microphone passthrough

- Add UAC1 gadget function (ConfigFS) with optimized endpoint config
- Browser mic capture with Opus encoding via WebCodecs AudioEncoder
- WebSocket audio transport (Opus 64kbps, 100x bandwidth reduction vs raw PCM)
- aplay subprocess for reliable PCM playback to USB gadget
- Settings toggle + ActionBar mic button (hidden when UAC disabled)
- Dynamic PCM device resolution (/proc/asound)
- c_chmask=0 + req_number=4 fixes DWC3 composite isochronous endpoint issue
This commit is contained in:
arounyf
2026-07-23 06:56:53 +00:00
parent 4e32b05124
commit e9bed3688f
27 changed files with 977 additions and 16 deletions

View File

@@ -118,6 +118,16 @@ export const otgNetworkApi = {
interfaces: () => request<NetworkInterfaceInfo[]>('/devices/network'),
}
export const uacApi = {
get: () => request<{enabled: boolean; sample_rate: number; channels: number}>('/config/uac'),
update: (config: {enabled: boolean; sample_rate: number; channels: number}) =>
request('/config/uac', {
method: 'PATCH',
body: JSON.stringify(config),
}),
}
export const otgConfigApi = {
update: (config: OtgConfigUpdate) =>
request<OtgConfigResponse>('/config/otg', {