我有一个USB HID天平,我需要从那里获取称重报告。在Linux上,我可以通过一次从/dev/hidraw#读取7个字节来做到这一点,但是我希望使用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]);
}发布于 2011-02-06 01:13:45
使用libusb-win -从USB HID卡读卡器读取数据的示例
http://rowsandcolumns.blogspot.com/2011/02/read-from-magtek-card-swipe-reader-in.html
发布于 2011-02-04 23:58:39
HID使用中断传输AFAIK。你需要重写你的代码来使用它们。看看塔式描述符--它们告诉你要使用哪个接口。
也就是说,我认为在这种情况下使用/dev/hdiraw#要比使用libusb容易得多。
发布于 2012-02-10 13:44:11
尝试为wValue使用另一个值(例如,0x0300)。
还要检查bmRequestType和bRequest参数:bmRequestType必须等于0xA1,bRequest - 0x01。
https://stackoverflow.com/questions/4844692
复制相似问题