IOKit:创建一个MacOS设备实例,为USB-OTG设备提供坐标输入

时间:2017-11-05 20:08:43

标签: iokit

我正在开展一个项目,涉及通过USB OTG将单板计算机(BeagleBone Black或BeagleBoard X15)连接到Mac,然后提供基本的鼠标/触摸输入(指针坐标和左/右键单击事件)。

此过程在技术上应该非常类似于连接鼠标(或更准确地说,是接收精确鼠标坐标的触摸屏式设备)并将一些普通的HID输入传递给MacOS。所以我不需要IOKit的大部分复杂性 - 我认为我不需要创建内核扩展;我应该能够创建一个HID实例,MacOS已经为其提供了通用内核扩展。

所以我正在深入研究IOKit,以找出如何创建设备实例并提供输入。但是,我正在阅读的关于IOKit的几乎所有内容都涉及创建和注册新的内核扩展,服务等等 - 这些都与我的项目密切相关。

到目前为止,我所获得的唯一相关线索是I / O Registry Explorer和/ System / Library / Extensions的内容。其中有几个项目看起来很有希望,例如AppleDHIDMouse.kext。但是,我找不到任何代码来弥补差距:我的USB连接设备如何与内核扩展连接,为自己创建实例,以及发送命令。

有任何帮助吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的设备完全符合USB HID标准,在这种情况下,您在Mac端根本不需要任何代码,或者您需要创建内核扩展。

你有多远?您的设备在ioreg / IORegistryExplorer中的外观如何? (后者来自" Xcode附加工具"可从https://developer.apple.com/download/more/下载)

您的USB设备接口是否报告为HID? (bInterfaceClass 3)设备本身通常作为复合设备报告(bDeviceType 0)。 bInterfaceProtocol和bInterfacSubClass在HID的上下文中也有定义的含义,对于"平板电脑"风格设备。有了这些,macOS应该将您的设备作为HID设备接收并尝试使用其内置的HID设备驱动程序来驱动它。

HID设备的工作方式是通过"报告" - 具有灵活格式/布局的事件数据结构,其通过设备"报告描述符"来定义。那里定义了您的设备有哪些按钮,输入轴等。

有关USB"平板电脑的示例"与macOS一起使用的设备(绝对坐标指针设备),请查看code for the USB Tablet device that Qemu emulates。这可能是您自己设备的报告描述符的一个很好的起点。

如果您的设备不符合通用USB HID约定并使用某些自定义协议,则您需要一个很可能实现IOHIDDevice子类的自定义kext。这种驱动程序的一个示例是open source Mac driver for the Xbox 360's game controller,它的行为与标准USB HID设备不同。