c++ macOS中的HID设备接口

chy5wohz  于 4个月前  发布在  Mac
关注(0)|答案(3)|浏览(100)

我必须为OSX创建一个软件/驱动程序,与通过USB连接的HID设备进行交互。该应用程序的目的如下,
1.检测HID设备何时插入或移除。设备的PID和VID是已知的。
1.读取HID设备序列号、固件版本和与VID和PID匹配的连接设备的其他详细信息
1.当HID设备连接时,获取报告并将报告设置为HID设备。
1.与另一个应用程序通信,用户可以通过该应用程序更改HID设备设置
我不是一个驱动程序开发人员,但有C,C++,Obj C等的经验。我想知道什么是实现上述目标的最佳方法。那就是我应该开发内核扩展(驱动程序)还是有更好的选择?。
我面临的挑战是,

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

无论哪种方式,这对我来说是一个新的领域。你能建议一些文件或样本代码,从我可以开始。
也请提到论坛,或社区,这可能有助于开发mac设备驱动程序。
谢谢大家的帮助:)

pcww981p

pcww981p1#

MacOS X已经有HID设备的驱动程序。所以你不需要为它开发一个特殊的驱动程序/内核扩展。
您可以使用跨平台的开源库hidapi与HID设备进行通信。

axr492tv

axr492tv2#

(Note:更新12/2023,包含有关DriverKit的信息;原始问题和答案早于DriverKit的推出。
这个问题的另一个答案(hidapi)当然适用于许多不同的用例,我建议尽可能地使用这条路线。除了使用hidapi Package 器,您还可以直接使用IOHIDManager系统API。
但是,在某些情况下,您需要深入研究驱动程序开发。特别是,如果HID设备需要充当系统键盘或指针设备,但内置HID堆栈无法按您所需选择它,则可能需要(或想要)开发DriverKit(10月15日之前:内核空间)驱动程序。(不过,您也可以选择从用户空间将事件注入到窗口系统中,因此如果有疑问,我将首先使用它来原型化您的用例。
你还没有给我们足够的细节,关于你正在尝试做什么,或者设备的性质,真的说什么方法可能是最好的。
对于HIDDriverKit示例代码,Apple publishes some here。对于内核级别,请查看Apple自己的开源代码。(IOHIDFamily,IOUSBFamily等)在Web上搜索您正在使用的类也会在Github等上找到一些第三方OSS代码。
Stack Overflow和相关的Apple开发者邮件列表(Darwin-drivers,Darwin-kernel或Usb,取决于问题),也许开发者论坛(我发现他们很难持续跟踪/监控)可能是这类事情的最佳社区。

yyyllmsg

yyyllmsg3#

您有三种选择来开发您的驱动程序:
1.使用c lib从头开始构建:https://github.com/libusb/hidapi

据我所知,似乎2号是最好的方式来开发你的驱动程序。但3号也是一个伟大的地方开始你的发展。总的来说,我的建议是2号或3号。

相关问题