我正在尝试在Windows 7下为键盘(HID,如果重要)编写自定义“驱动程序”。最终目标是将两个键盘连接到计算机,但映射其中一个键盘的所有键。它们是特殊(自定义)功能。
我的想法是使用libusb-win32作为第二个键盘的驱动程序,并编写一个小程序来从键盘读取数据并对其进行操作。我已经成功安装了驱动程序,并且我的程序可以识别设备,但是所有传输都会超时,即使我按下了按键。
这是我的代码:
struct usb_bus *busses;
struct usb_device *dev;
char buf[1024];
usb_init();
usb_find_busses();
usb_find_devices();
busses = usb_get_busses();
dev = busses->devices;
cout << dev->descriptor.idVendor << '\n' << dev->descriptor.idProduct << '\n';
usb_dev_handle *h = usb_open(dev);
cout << usb_set_configuration(h, 1) << '\n';
cout << usb_claim_interface(h, 0) << '\n';
cout << usb_interrupt_read(h, 129, buf, 1024, 5000) << '\n';
cout << usb_strerror();
cout << usb_release_interface(h, 0) << '\n';
cout << usb_close(h) << '\n';
然后它返回:
1133
49941
0
0
-116
libusb0-dll:err [_usb_reap_async] timeout error
0
0
(我在那5秒内按了很多键)
只有一个总线,一个设备,一个配置,一个接口和一个端点。
端点有bmAttributes = 3
,这意味着我应该使用中断传输(对吗?)
那为什么我什么都没得到?我在滥用libusb吗?如果没有libusb,你知道一种方法吗?
答案 0 :(得分:4)
实际上非常简单 - 从USB设备读取时,必须准确读取 正确的字节数。您可以通过阅读wMaxPacketSize
来了解该金额。
显然,任何其他大小的读取请求只会导致超时。