Udev
如何讓 USB 設備註冊為 HID?
我有一個硬體設備,我想通過 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 的成本。