【问题标题】:libusb-win32 - can't read from keyboardlibusb-win32 - 无法从键盘读取
【发布时间】:2012-01-03 22:34:21
【问题描述】:

我正在尝试在 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 的方法吗?

【问题讨论】:

  • 您说“……目标是拥有两个键盘……将其中一个键盘的所有键映射到特殊(自定义)功能。”你完成过那个项目吗?它在某处可用吗?一段时间以来,我一直有完全相同的想法,但从未有时间攻击它。谢谢!!
  • @JonasHeidelberg 看看这个gist。该项目本身是 C#,并且要点中缺少一些类,但我认为它可以以这种形式使用。 (整个项目不公开,我无法发布)

标签: windows libusb


【解决方案1】:

实际上很简单 - 从 USB 设备读取时,您必须准确读取正确数量的字节。阅读wMaxPacketSize,您就知道该金额是多少。

显然,任何其他大小的读取请求都会导致超时。

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2020-06-26
    • 2014-02-13
    • 2020-11-01
    • 2015-03-28
    相关资源
    最近更新 更多