Как я могу передать данные в HID, если у него нет конечной точки OUT - PullRequest
4 голосов
/ 03 июня 2019

Я пытаюсь осуществить обмен данными с некоторым устройством HID. Мне удалось реализовать чтение с этого устройства с помощью функции libusb_interrupt_transfer, но я не знаю, как реализовать отправку буфера в HID, потому что устройство не имеет конечной точки OUT. Как я могу передать данные в HID? Дескриптор устройства выглядит так:

Bus 001 Device 074: ID 16d0:8080 MCS 
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x16d0 MCS
  idProduct          0x8080 
  bcdDevice            2.03
  iManufacturer           1 
  iProduct                2 
  iSerial                 3 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      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.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      32
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               5

1 Ответ

0 голосов
/ 03 июля 2019

Если устройство не имеет конечной точки OUT, единственный способ отправки данных на устройство - это использование контрольных передач с использованием конечной точки управления по умолчанию (EP0).

В документе HID Specification указаны специфические запросы управления для класса HID. Однако запросы SET_ * не являются обязательными, поэтому ваше устройство HID может их не поддерживать.

Могут также быть запросы управления, специфичные для поставщика, но нет никакого способа угадать их, поэтому они должны быть задокументированы поставщиком устройства.

...