macOS 中的 HID 设备接口

问题描述 投票:0回答:3

我必须为 OSX 创建一个软件/驱动程序,以便与通过 USB 连接的 HID 设备进行交互。申请的目的如下,

  1. 检测 HID 设备何时插入或移除。设备的 PID 和 VID 已知。
  2. 读取与 VID 和 PID 匹配的已连接设备的 HID 设备序列号、固件版本和其他详细信息
  3. 连接 HID 设备时获取报告并设置报告。
  4. 与另一个应用程序通信,用户可以通过该应用程序更改 HID 设备设置

我不是驱动程序开发人员,但有 C、C++、Obj C 等方面的经验。我想知道实现上述目标的最佳方法是什么。那就是我应该开发内核扩展(驱动程序)还是有更好的选择?.

我面临的挑战是,

  • 从驱动程序开发开始
  • Mac 应用程序与驱动程序通信。

无论怎样,这对我来说都是一个新领域。您能否建议一些文档或示例代码,从我开始。

另请提及可能有助于开发 Mac 设备驱动程序的论坛或社区。

谢谢大家的帮助。 :)

c++ macos driver hid iokit
3个回答
3
投票

MacOS X 已经具有 HID 设备的驱动程序。因此您不需要为其开发特殊的驱动程序/内核扩展。

您可以使用跨平台开源库hidapi与HID设备通信。


1
投票

这个问题的另一个答案对于许多不同的用例来说肯定是正确的,我建议尽可能走这条路。然而,在某些情况下,您肯定需要深入研究 kext 方面。特别是,如果 HID 设备需要充当系统键盘或指点设备,但内置 HID 堆栈没有按您希望的方式拾取它,则您可能需要(或想要)开发一个内核 -太空司机。 (不过,您也可以选择从用户空间将事件注入到窗口系统中,因此,如果有疑问,我将首先使用它来构建您的用例原型。)

您还没有向我们提供足够的详细信息,说明您想要做什么,或者设备的性质,无法真正确定哪种方法可能是最好的。

有关示例代码,请查看 Apple 自己的开源代码。 (IOHIDFamily、IOUSBFamily 等)在网络上搜索您正在使用的类也会在 Github 等上找到一些第三方 OSS 代码。

Stack Overflow 和相关的 Apple 开发者邮件列表(Darwin-drivers、Darwin-kernel 或 Usb,具体取决于问题),也许开发者论坛(我发现他们很难持续关注/监控)可能是最好的社区这种事。


0
投票

您可以选择三种方式来开发您的驱动程序:

  1. 使用 c lib 从头开始构建:https://github.com/libusb/hidapi

  2. 遵循 Apple 的 HID 驱动程序文档:https://developer.apple.com/documentation/hiddriverkit,例如:

  3. 参考一些 GitHub 资源,例如: https://github.com/astarasikov/osxhidtouch

据我所知,似乎第二种方法是开发驱动程序的最佳方法。但第三个也是开始你的发展的好地方。总的来说,我的建议是 2 号或 3 号。

© www.soinside.com 2019 - 2024. All rights reserved.