ハードウェアデバイスがあり、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
答え1
HID自体は実際にはデバイスタイプではありませんが、さまざまなデバイスタイプと対話するための標準プロトコルです(USBに依存せず、Bluetooth、I2C、およびその他の低レベル通信プロトコルを介しても使用されます)。ただし、デバイス自体がプロトコルをサポートする必要があります。そうしないと、ソフトウェアがデバイスに配信する内容を理解できません。
あなたの場合、問題のデバイスはVSC(ベンダー固有のクラス)として識別された単一のエンドポイントを提供します。これは、設計者が他の標準のUSBデバイスタイプに適していないと思ったことを表現する素晴らしい方法です。これらのデバイスの中には、他のモードに切り替えるために送信できる特別なコマンドがあります。これには、HIDモードに切り替えるコマンドが含まれ、デバイスのマニュアルに記載されています。
ただし、実際には libusb を使用して通常のコマンドセットを使用してデバイスと直接通信し、HID のオーバーヘッドをスキップできます。