图书馆应该;
- 易于使用,几行客户端代码就能完成很多工作
- 尽可能独立于平台。(以防将来移植到其他平台)
- 有 C++ 绑定。
- 成熟稳重
我还想通过回调收到大多数 HID 事件的通知。
我考虑了以下替代方案:
- libhid -(不幸的是?)这是 GPL,不能在我的应用程序中使用。
- WDK - 对我来说似乎有点低级。我不需要那种控制。
- atusbhid - 这具有适当的抽象级别,但它与 Windows 消息传递循环紧密相关
还有其他选择吗?
看看hidapi:它是 C,它回答了 C++ 绑定问题(有效:)),是跨平台的,并且具有非常宽松的许可证。
它似乎没有回调,但是......
如果 libhid 对您有用,那么也许要做的事情是编写一个应用程序(您将使用 GPL),它使用 libhid 与设备通信,然后通过 TCP 连接提供您需要的任何内容。您的真实应用程序将通过 TCP 连接以执行其需要的操作。这显然会对性能造成巨大影响。
此应用程序实际上是 libhid 和您的应用程序之间的“垫片”。在这种情况下,垫片将出于法律而非技术原因而存在。
我不是说这是一个好主意,只是说这是一个主意。
考虑自己滚动。您将完全控制界面、平台独立性级别等。即使项目是 GPL,您也可以将其用作您自己的秘诀,并作为测试平台来发现您自己的问题。
看看这段代码:
从 C# 读取和使用 FM 收音机(或任何其他 USB HID 设备)
它为您提供了一些简单的类来与 HID 设备通信。它归结为获取设备的别名(类似于 \?\HID#Vid_nnnn&Pid_nnn#...)并使用 CreateFile 打开它。您可以在 下获取设备的别名HKML\SYSTEM\CCS\Control\DeviceClasses\{4d1e55...}\
。
Vid 和 Pid 是设备的供应商 ID 和产品 ID(检查Device Manager)。
有几个适用于 Windows 的 USB HID 主机驱动程序。一个易于使用的动态链接库来自http://embedded24.net。
还包括几个适用于 Visual Studio 2010(C++、C# 和 Visual Basic)的示例应用程序。