在Linux上,通过USB使用HID报告的好方法是什么?

时间:2016-11-14 22:39:26

标签: linux usb hid iokit

在macOS上,我使用IOKit通过USB连接获取和设置HID报告(对于好奇的,这是一个站立式桌面的控制器,允许您以编程方式升高和降低桌面)。我可以使用IOHIDManager获取设备列表:

_manager = IOHIDManagerCreate(NULL, 0);

NSDictionary *deviceQuery = @{@kIOHIDVendorIDKey: @0x12D3, @kIOHIDProductIDKey: @0x0002};
IOHIDManagerSetDeviceMatching(_manager, (__bridge CFDictionaryRef)deviceQuery);
IOHIDManagerOpen(_manager, kIOHIDManagerOptionNone);

CFSetRef devices = IOHIDManagerCopyDevices(_manager);

// pick a device from the set and you eventually get a...
IOHIDDeviceRef myDevice = foo;

然后我使用以下方法构建请求缓冲区并发出请求:

int8_t *_buffer = ...;
IOHIDDeviceSetReport(myDevice, kIOHIDReportTypeFeature, *_buffer & 0xff, (const uint8_t *)_buffer, REQ_BUFFER_SIZE);

...并使用以下方式阅读回复:

IOHIDDeviceGetReport(myDevice, kIOHIDReportTypeFeature, *_buffer & 0xff, (uint8_t *)_buffer, RES_BUFFER_SIZE);

在Linux上执行此操作的类似方法是什么?我之前从未在Linux上使用USB(也没有HID设备),只要它在Raspberry Pi上运行,我几乎可以使用任何堆栈。

1 个答案:

答案 0 :(得分:0)

列出所有设备,捕获接口,...在linux libsub 上使用,请参阅此http://www.microchip.com/forums/m340898.aspx

对于HID报告,您可以使用usbhid-dump http://www.pkill.info/linux/man/8-usbhid-dump/ https://github.com/DIGImend/usbhid-dump hidraw 进行低级别