MAC中的HID设备接口

时间:2017-01-09 12:09:59

标签: c++ macos driver hid iokit

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

  1. 检测何时插入或移除HID设备。设备的PID和VID是已知的。
  2. 读取HID设备序列号,固件版本以及与VID和PID匹配的已连接设备的其他详细信息
  3. 获取报告并在连接时将报告设置到HID设备。
  4. 与另一个用户可以通过其更改HID设备设置的应用程序进行通信
  5. 我不是驱动程序开发人员,但有C,C ++,Obj C等经验。我想知道实现上述目标的最佳方法是什么。那我应该开发内核扩展(驱动程序)还是有更好的替代方案?

    我面临的挑战是,

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

    无论哪种方式,这对我来说都是一个新领域。您能否请一些文件或示例代码,我可以从中开始。

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

    谢谢大家的帮助。 :)

2 个答案:

答案 0 :(得分:2)

MacOS X已经有HID设备的驱动程序。所以你不需要为它开发一个特殊的驱动程序/内核扩展。

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

答案 1 :(得分:1)

这个问题的另一个答案肯定适用于一堆不同的用例,我建议尽可能沿着这条路走下去。但是,肯定会有一些情况需要深入到kext端。特别是,如果HID设备需要充当系统键盘或指点设备,但是内置的HID堆栈没有按照您的需要进行拾取,则可能需要(或想要)开发内核空间驱动程序。 (你也可以选择从用户空间向窗口系统中注入事件,所以如果有疑问的话,我首先用你的用例做原型。)

您还没有给我们足够的详细信息,告诉我们您尝试做什么,或设备的性质,以确定哪种方法可能最佳。

有关示例代码,请查看Apple自己的开源代码。 (IOHIDFamily,IOUSBFamily等)在网上搜索你正在使用的课程也会在Github等上发现一些第三方OSS代码。

Stack Overflow和相关的Apple开发人员邮件列表(Darwin-drivers,Darwin-kernel或Usb,取决于问题),以及开发人员论坛(我发现他们很难一直遵循/监控)可能是最好的这种事情的社区。