我有一个USB HID刻度,我需要从中获取称重报告。我可以通过从/dev/hidraw#
一次读取7个字节来在Linux上执行此操作,但我希望使用libusb-1.0获取相同的信息。
即使我得到一些非空字节,我也会收到错误-9:LIBUSB_ERROR_PIPE
我试图像这样使用控件传输:
#define WEIGH_REPORT_SIZE 7
/*
* Open a handle to the found scale
*/
libusb_open(dev, &handle);
#ifdef __linux__
libusb_detach_kernel_driver(handle, 0);
#endif
libusb_claim_interface(handle, 0);
/*
* Try to transfer data about status
*
*/
unsigned char data[WEIGH_REPORT_SIZE];
unsigned int len = libusb_control_transfer(
handle,
LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS |
LIBUSB_RECIPIENT_INTERFACE,
HID_REPORT_GET,
//wValue => hid report, no report ID
0x0100,
0x00, //windex => interface 0
data,
WEIGH_REPORT_SIZE, //wLength
10000 //timeout => 10 sec
);
int i;
printf("Got %d bytes from control transfer:\n", len);
for(i = 0; i < WEIGH_REPORT_SIZE; i++) {
printf("%x\n", data[i]);
}
答案 0 :(得分:3)
使用libusb-win从USB HID读卡器读取的示例 -
http://rowsandcolumns.blogspot.com/2011/02/read-from-magtek-card-swipe-reader-in.html
答案 1 :(得分:2)
HID使用中断传输AFAIK。您需要重写代码才能使用它们。并查看thouse描述符 - 它们告诉您使用哪个接口。
那说我觉得在这个案例中使用/ dev / hdiraw#然后libusb要容易得多。
答案 2 :(得分:1)
尝试使用wValue
的另一个值(例如0x0300
)。
同时检查bmRequestType
和bRequest
参数:bmRequestType
必须等于0xA1
,bRequest
- 0x01
。