# USB do PLAUD e fallback da ponte

O caminho principal da ponte continua sendo Bluetooth autenticado. O mesmo
aparelho apareceu em dois estados medidos: USB CDC `0E8D:0023` (sem arquivos)
e USB Mass Storage `0BDA:4042`, com volume `PLAUD_NOTE`. Conectar o cabo pode
colocar o aparelho em U-Disk e bloquear temporariamente o acesso BLE.

`tools/plaud_usb.py` existe como fallback somente quando o Windows expõe um
volume removível com rótulo `PLAUD`, `PLAUD_NOTE` ou equivalente. Para o perfil
Mass Storage medido, ele reconhece exclusivamente arquivos
`CALLS\YYYYMMDD\<session>.ASR` e o PNP `0BDA:4042`. Ele consulta apenas
inventário CIM, não envia comandos ao USB, não apaga arquivos e não aceita
extensões ou layouts desconhecidos.

Para um volume reconhecido, o fallback:

1. espera duas leituras iguais separadas por pelo menos 10 segundos;
2. aceita ASR somente em blocos de 80 bytes, mono, 16 kHz, 20 ms; todos os
   TOCs são conferidos antes de qualquer remux;
3. remuxa os pacotes para `recording-<session>.ogg` usando o helper Opus já
   medido, sem reencodar o áudio;
4. copia atomicamente para `%LOCALAPPDATA%\Icarus\client-captures`, conferindo
   tamanho, data e SHA-256 do original;
5. registra a importação em `%LOCALAPPDATA%\Icarus\cloud-sync\usb.sqlite3`.

Arquivos Ogg/Opus genéricos, quando expostos pelo volume, também ficam limitados
a 256 MiB e só passam após CRC, cabeçalhos Opus e uma página EOS final; arquivos
incompletos ou que cresçam durante a leitura são descartados.

O arquivo original nunca é alterado. A ponte BLE baixa gravações quando o
aparelho está fora do modo USB e o Bluetooth está disponível. Na unidade
medida, o modo USB respondeu ao status BLE, mas bloqueou a lista de arquivos.
Se houver apenas CDC e nenhum volume legível, a ponte aguarda outro modo de
acesso. O ASR medido é enviado no contêiner Ogg/Opus mono; a transcrição
decodifica blocos temporários somente no worker.

O relatório de `collect_usb()` usa estes estados:

- `usb_not_detected`: nenhum dispositivo USB conhecido;
- `usb_cdc_no_files`: dispositivo conhecido, mas nenhum volume de arquivos;
- `usb_files_pending_stability`: arquivo aguardando a segunda leitura;
- `imported`: pelo menos um Ogg/Opus foi copiado;
- `usb_no_new_files`: havia uma gravação reconhecida, mas ela já está no
  manifesto ou faz parte do baseline inicial;
- `usb_connected_empty`: volume conhecido sem arquivo ASR válido novo.

Não se deve prometer transferência USB para o hardware atual sem aparecer um
volume removível validado. O cabo pode continuar servindo somente para carga.
