Udev

如何讓 USB 設備註冊為 HID?

  • November 28, 2018

我有一個硬體設備,我想通過 HID 庫在 C 中與之通信。但是此設備不會顯示為 HID。有沒有辦法做到這一點(也許有 udev 規則)?

$ dmesg
usb 1-2: new full-speed USB device number 7 using xhci_hcd
usb 1-2: New USB device found, idVendor=104d, idProduct=3001
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2: Product: ESP301 Motion Control 
usb 1-2: Manufacturer: NEWPORT Corp.    
usb 1-2: SerialNumber: 0000000000000000

$ lsusb -v
Bus 001 Device 007: ID 104d:3001 Newport Corporation 
Device Descriptor:
bLength                18
bDescriptorType         1
bcdUSB               1.10
bDeviceClass          255 Vendor Specific Class
bDeviceSubClass         0 
bDeviceProtocol         0 
bMaxPacketSize0         8
idVendor           0x104d Newport Corporation
idProduct          0x3001 
bcdDevice            1.01
iManufacturer           1 NEWPORT Corp.    
iProduct                2 ESP301 Motion Control 
iSerial                 3 0000000000000000
bNumConfigurations      1
Configuration Descriptor:
bLength                 9
bDescriptorType         2
wTotalLength           39
bNumInterfaces          1
bConfigurationValue     2
iConfiguration          0 
bmAttributes         0xa0
(Bus Powered)
Remote Wakeup
MaxPower              100mA
Interface Descriptor:
bLength                 9
bDescriptorType         4
bInterfaceNumber        0
bAlternateSetting       0
bNumEndpoints           3
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
Endpoint Descriptor:
 bLength                 7
 bDescriptorType         5
 bEndpointAddress     0x83  EP 3 IN
 bmAttributes            3
 Transfer Type            Interrupt
 Synch Type               None
 Usage Type               Data
 wMaxPacketSize     0x0002  1x 2 bytes
 bInterval               1
Device Status:     0x0001
Self Powered

HID 本身並不是真正的設備類型,而是用於與各種設備類型互動的標準協議(甚至不依賴於 USB,它還用於藍牙、I2C 和可能的其他較低級別的通信協議)。不過,設備本身必須支持該協議,否則它將無法理解您的軟體在對它說什麼。

在您的情況下,有問題的設備呈現一個標識為供應商特定類 (VSC) 的單個端點,這是一種奇特的說法,即設計人員認為它不適合任何其他標準 USB 設備類型。某些此類設備可能具有可以發送給它們以將其切換到不同模式的特殊命令,其中可能包括將其切換到 HID 模式的命令,並且應包含在設備文件中。

但實際上,您可以輕鬆地使用 libusb 直接與設備對話,使用它的正常命令集,並跳過 HID 的成本。

引用自:https://unix.stackexchange.com/questions/484679