Tentando ler o dispositivo de áudio USB, mas / dev / hidraw0 não está disponível para leitura

4

Estou tentando escrever um driver simples para minha Placa de Som USB (apenas por diversão) no Xubuntu 14.04 - por exemplo, eu quero ter uma oportunidade de controlar o volume no meu laptop através deste dispositivo.

O problema é que não tenho nada na saída com sudo cat /dev/hidraw0 . Eu testei meu mouse USB dessa maneira - eu estava obtendo alguma saída em cliques e movimentos. Eu acho que o dispositivo é exatamente /dev/hidraw0 , porque é a única coisa que aparece no diretório /dev/ quando eu o conecto e desaparece quando eu o conecto.

Além disso, este exemplo link mostra-me

Report Descriptor Size: 50
Report Descriptor:
5 c 9 1 a1 1 15 0 25 1 9 e9 9 ea 75 1 95 2 81 2 9 e2 9 0 81 6 9 0 95 4 81 2 26 ff 0 9 0 75 8 95 f 81 2 9 0 95 10 91 2 c0 

Raw Name: C-Media Electronics Inc. USB Advanced Audio Device
Raw Phys: usb-0000:00:1a.0-1.2/input3
Raw Info:
        bustype: 3 (USB)
        vendor: 0x0b05
        product: 0x1743
HIDIOCSFEATURE: Broken pipe
HIDIOCGFEATURE: Broken pipe
Error: 32
write: Broken pipe
read: Resource temporarily unavailable

Como posso ler algumas intput deste dispositivo? O que há de errado?

[EDIT 1]

Comando sudo lsusb -v -d 0b05:1743 mostra

Bus 001 Device 005: ID 0b05:1743 ASUSTek Computer, Inc. Xonar U1 Audio Station
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0b05 ASUSTek Computer, Inc.
  idProduct          0x1743 Xonar U1 Audio Station
  bcdDevice            1.00
  iManufacturer           3 C-Media Electronics Inc.
  iProduct                1 USB Advanced Audio Device
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          293
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol      0 
      iInterface              0 
      AudioControl Interface Descriptor:
        bLength                10
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength          128
        bInCollection           2
        baInterfaceNr( 0)       1
        baInterfaceNr( 1)       2
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             1
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bNrChannels             2
        wChannelConfig     0x0003
          Left Front (L)
          Right Front (R)
        iChannelNames           0 
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             2
        wTerminalType      0x0201 Microphone
        bAssocTerminal          0
        bNrChannels             2
        wChannelConfig     0x0003
          Left Front (L)
          Right Front (R)
        iChannelNames           0 
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             3
        wTerminalType      0x0603 Line Connector
        bAssocTerminal          0
        bNrChannels             2
        wChannelConfig     0x0003
          Left Front (L)
          Right Front (R)
        iChannelNames           0 
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             4
        wTerminalType      0x0605 SPDIF interface
        bAssocTerminal          0
        bNrChannels             2
        wChannelConfig     0x0003
          Left Front (L)
          Right Front (R)
        iChannelNames           0 
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             6
        wTerminalType      0x0301 Speaker
        bAssocTerminal          0
        bSourceID               9
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             7
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bSourceID               8
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      5 (SELECTOR_UNIT)
        bUnitID                 8
        bNrInPins               3
        baSource( 0)           10
        baSource( 1)           11
        baSource( 2)           12
        iSelector               0 
      AudioControl Interface Descriptor:
        bLength                13
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                 9
        bSourceID               1
        bControlSize            2
        bmaControls( 0)      0x01
        bmaControls( 0)      0x02
          Mute Control
          Loudness Control
        bmaControls( 1)      0x02
        bmaControls( 1)      0x00
          Volume Control
        bmaControls( 2)      0x02
        bmaControls( 2)      0x00
          Volume Control
        iFeature                0 
      AudioControl Interface Descriptor:
        bLength                10
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                10
        bSourceID               2
        bControlSize            1
        bmaControls( 0)      0x01
          Mute Control
        bmaControls( 1)      0x02
          Volume Control
        bmaControls( 2)      0x02
          Volume Control
        iFeature                0 
      AudioControl Interface Descriptor:
        bLength                10
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                11
        bSourceID               3
        bControlSize            1
        bmaControls( 0)      0x01
          Mute Control
        bmaControls( 1)      0x02
          Volume Control
        bmaControls( 2)      0x02
          Volume Control
        iFeature                0 
      AudioControl Interface Descriptor:
        bLength                10
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                12
        bSourceID               4
        bControlSize            1
        bmaControls( 0)      0x01
          Mute Control
        bmaControls( 1)      0x00
        bmaControls( 2)      0x00
        iFeature                0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0 
      iInterface              0 
      AudioStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           1
        bDelay                  1 frames
        wFormatTag              1 PCM
      AudioStreaming Interface Descriptor:
        bLength                20
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bNrChannels             2
        bSubframeSize           2
        bBitResolution         16
        bSamFreqType            4 Discrete
        tSamFreq[ 0]         8000
        tSamFreq[ 1]        16000
        tSamFreq[ 2]        44100
        tSamFreq[ 3]        48000
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            9
          Transfer Type            Isochronous
          Synch Type               Adaptive
          Usage Type               Data
        wMaxPacketSize     0x00c8  1x 200 bytes
        bInterval               1
        bRefresh                0
        bSynchAddress           0
        AudioControl Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x01
            Sampling Frequency
          bLockDelayUnits         1 Milliseconds
          wLockDelay              1 Milliseconds
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0 
      iInterface              0 
      AudioStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           7
        bDelay                  1 frames
        wFormatTag              1 PCM
      AudioStreaming Interface Descriptor:
        bLength                20
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bNrChannels             2
        bSubframeSize           2
        bBitResolution         16
        bSamFreqType            4 Discrete
        tSamFreq[ 0]         8000
        tSamFreq[ 1]        16000
        tSamFreq[ 2]        44100
        tSamFreq[ 3]        48000
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x00c8  1x 200 bytes
        bInterval               1
        bRefresh                0
        bSynchAddress           0
        AudioControl Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x01
            Sampling Frequency
          bLockDelayUnits         0 Undefined
          wLockDelay              0 Undefined
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      50
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x87  EP 7 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               1
Device Status:     0x0000
  (Bus Powered)

O comando printf '01%030d' | xxd -ps -r | sudo tee /dev/hidraw0 mostra um erro tee: /dev/hidraw0: Broken pipe .

[EDIT 2]

O comando sudo evtest /dev/input/event14 não reage na minha interação com o dispositivo

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0xb05 product 0x1743 version 0x100
Input device name: "C-Media Electronics Inc. USB Advanced Audio Device"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)

[EDIT 3]

Aqui está o meu resultado sudo dumpcap -i usbmon1 -w - > usb.pcapng : link

    
por Charlie 27.11.2014 / 11:59

1 resposta

1

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?

    
por 27.11.2014 / 22:44