Você não "vê" nenhum áudio em /dev/hidraw0
porque as mensagens de controle são tratadas em um ponto de extremidade diferente das mensagens de áudio. As mensagens de controle precisam de transmissão confiável enquanto o áudio pode se perder e geralmente usa transferências isócronas .
Seu programa de teste resulta em erros porque tentou escrever um relatório de tamanho 2.
Aqui está o descritor de relatório HID decodificado (convertido usando hidrd-convert
):
Usage Page (Consumer), ; 05 0C - Consumer (0Ch)
Usage (Consumer Control), ; 09 01 - Consumer control (01h, application collection)
Collection (Application), ; A1 01
Logical Minimum (0), ; 15 00
Logical Maximum (1), ; 25 01
Usage (Volume Inc), ; 09 E9 - Volume increment (E9h, re-trigger control)
Usage (Volume Dec), ; 09 EA - Volume decrement (EAh, re-trigger control)
Report Size (1), ; 75 01
Report Count (2), ; 95 02
Input (Variable), ; 81 02
Usage (Mute), ; 09 E2 - Mute (E2h, on/off control)
Usage (00h), ; 09 00
Input (Variable, Relative), ; 81 06
Usage (00h), ; 09 00
Report Count (4), ; 95 04
Input (Variable), ; 81 02
Logical Maximum (255), ; 26 FF 00
Usage (00h), ; 09 00
Report Size (8), ; 75 08
Report Count (15), ; 95 0F
Input (Variable), ; 81 02
Usage (00h), ; 09 00
Report Count (16), ; 95 10
Output (Variable), ; 91 02
End Collection ; C0
Este descritor descreve o formato binário dos dados que podem ser enviados usando a Set_Report
Request (sobre o pipe de controle). (Consulte este documento Definição de classe de dispositivo para dispositivos de interface humana (HID) para obter detalhes, especialmente 8,5 Exemplo de relatório) .
Interpretação do descritor para o layout de bits para os relatórios Entrada (dispositivo para host, você os recebe em um ponto de extremidade de interrupção, veja o capítulo 4.4 do HID 1.1):
0.0: Volume Increment
0.1: Volume Decrement
0.2: Mute
0.3: (null)
0.4-7: (null)
15 times 8 bits (1 byte): (null)
Se você precisar enviar relatórios HID, observe que a contagem de relatórios do relatório de saída é 16 (e o tamanho de bit é 8). Portanto, um relatório Output (um que é enviado por um ponto final de interrupção) é de 16 bytes.
Tanto quanto eu posso ver, seu dispositivo só é capaz de enviar eventos importantes que precisam ser processados pelo sistema operacional. Ele não fornece funcionalidade para ajustar os níveis de áudio no hardware por meio de software.
Quanto à incapacidade de ler, o dispositivo não tem dados significativos para informar sobre o tubo de controle, portanto, é possível que o fabricante não tenha se preocupado em implementar o método Get_Report
. A propósito, como sudo lsusb -v -d 0b05:1743
se parece?