Como gravar dados em um dispositivo USB HID?

0

Eu tenho que desenvolver um aplicativo para me comunicar com um C8051F340-TB placa de Silicon Labs através de USB (só para ficar claro, eu estou usando o conector P3 da fig. 4 do link anterior, não o adaptador de depuração USB da fig. 1). Eu pisquei o dispositivo com um programa de exemplo que deveria ecoar os dados recebidos através do USB. No entanto, não posso tentar porque não consigo descobrir como enviar dados para um dispositivo USB. É a primeira vez que estou trabalhando com um dispositivo USB em baixo nível.

Estou no Xubuntu 18.04 e o comando lsusb -v diz, entre outras coisas, isto:

Bus 001 Device 023: ID 10c4:ea61 Cygnal Integrated Products, Inc. CP210x UART Bridge
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x10c4 Cygnal Integrated Products, Inc.
  idProduct          0xea61 CP210x UART Bridge
  bcdDevice            1.00
  iManufacturer           1 Myself
  iProduct                2 USB communication test
  iSerial                 3 0001
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower               64mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0000
  (Bus Powered)

que parece ser o meu dispositivo (reconheci os campos "iManufacturer" e "iProduct").

Como posso enviar um byte, uma string ou algo para o dispositivo? Além disso, como posso ler os dados que me envia?

    
por user171780 25.10.2018 / 17:20

1 resposta

0

Para dispositivos HID, consulte dmesg , localize o dispositivo hidraw correspondente, escreva ou leia a partir dele ( cat , hexdump ).

Dependendo da classe HID, você também pode obter eventos em /dev/event... .

No entanto, para dispositivos HID, eu esperaria

 bInterfaceClass         3 Human Interface Device

para que você não tenha programado o dispositivo corretamente. O descritor HID (acessível via debugfs) também deve estar correto.

Veja também usbmon (acessível via Wireshark) e libusb , caso você não consiga fazer a HID funcionar.

    
por 25.10.2018 / 18:15