在Windows上与USB HID设备通信,最好的USB库是什么?

20

该库应当:

  • 易于使用,少量的客户端代码就应该实现很多功能
  • 尽可能与平台无关。(以便未来移植到其他平台)
  • 有C++绑定。
  • 成熟稳定

我还希望通过回调函数通知大多数HID事件。

我已考虑了以下替代方案:

  • libhid - (不幸的是?) 这是GPL,不能在我的应用程序中使用。
  • WDK - 对于我的用途来说似乎有点低级。我不需要那种控制。
  • atusbhid - 这具有适当的抽象级别,但它牢固地绑定到Windows消息循环中

还有其他替代方案可以提供吗?


我通过测试发现,libusb-win32-src-1.2.6.0没有初始化struct usb_bus的devices元素。请尝试其他方法。 - Frank
6个回答

10

看一下hidapi:它是用C编写的,这回答了关于C++绑定的问题(有效地 :)),具有跨平台性并具有非常宽松的许可证。

它似乎没有回调函数,但是...


如果由于许可证问题无法使用libhid,则绝对是最佳选择。 - pattivacek
顺便提一下,Hidapi 在 MacOS 上也很好用。我刚刚用它构建了一个小工具。 - Alyoshak
[signal11/hidapi]不再开发或支持(作者失踪了)。 但是[libusb/hidapi]得到了很好的支持并且有很多改进。 - Youw

5
如果libhid适用于您,那么也许可以编写一个应用程序(您需要GPL),使用libhid与设备通信,然后通过TCP连接提供所需内容。您的真实应用程序将通过TCP连接进行所需操作。这显然会导致非常大的性能损失。
这个应用程序实际上是libhid和您的应用程序之间的“垫片”。在这种情况下,垫片存在是出于法律而非技术原因。
我不是说这是一个好主意,只是一个想法。

3
考虑自行开发。这样你就可以完全控制界面、平台独立性等方面。即使一个项目是GPL,你也可以将其用作自己的配方,并作为测试平台来查找自己的问题。

我已经在C#和C++/CLI中创建了自己的HID库。你可以参考WDK。 - AZ.

2

看一下这段代码:

使用C#读取并使用FM收音机(或任何其他USB HID设备)

它提供了一些简单的类来与HID设备进行通信。它归结为获取设备的别名(类似于\?\HID#Vid_nnnn&Pid_nnn#...),然后使用CreateFile打开它。您可以在HKML \ SYSTEM \ CCS \ Control \ DeviceClasses \ {4d1e55 ...} 下获取设备的别名。

Vid和Pid是设备的供应商ID和产品ID(请参阅设备管理器)。


2

有几个适用于Windows的USB HID主机驱动程序。一个易于使用的动态链接库来自http://embedded24.net

此外,还包括了一些示例应用程序,适用于Visual Studio 2010(C++、C#和Visual Basic)。


2
Trace systems的HIDmaker软件套件是一个选项。
优点:
- 易于使用(非常适合学习如何为USB HID编程) - 以多种项目格式(Visual Studio和Borland)生成可工作的应用程序源代码 - 生成稳定的主机和设备示例代码(在我的经验中非常稳定) - 高性能(如果可以说HID本身具有高性能)
缺点:
- 只能在Microsoft Windows上运行 - 使用自己的USB库,我认为是ActiveX

因此,它只是为您提供了一个C++绑定到他们的ActiveX控件。此外,它旨在为各种微控制器生成硬件端的代码。对我来说,这似乎有点过度设计了。 - Dave Van den Eynde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接