我正在尝试将一些使用hidd_getInputReport的Windows代码移植到Linux使用libusb。从我可以看出的是我需要打电话给USB_Control_msg,但是我在找出要传递的参数时遇到问题。
我追求的报告ID是0x01。这是我到目前为止所拥有的。
#define HID_GET_REPORT 0x01
#define HID_REPORT_TYPE_INPUT 0x01
#define INTERFACE_NUMBER 0x00
int reportId = 0x01;
int bytesSent = usb_control_msg(
devHandle,
USB_ENDPOINT_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
HID_GET_REPORT,
(HID_REPORT_TYPE_INPUT << 8) | reportId,
INTERFACE_NUMBER,
buf,
sizeof(buf),
10000);
我真的不确定hid_get_report,hid_report_type_input和interface_number。我在网络上的一个示例中找到了它们。更改各种值确实会导致不同的返回代码,但似乎在任何地方都没有记录下来。
看来您需要在调用其他功能之前分离内核并要求接口。我打电话给以下内容,并解决了问题。
usb_detach_kernel_driver_np
usb_claim_interface