【问题标题】:IOKit: Creating a MacOS device instance to provide coordinate input for a USB-OTG deviceIOKit:创建一个 MacOS 设备实例,为 USB-OTG 设备提供坐标输入
【发布时间】:2017-11-05 20:08:43
【问题描述】:

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

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

所以我正在深入研究 IOKit 以弄清楚如何创建设备实例并提供输入。然而,我所读到的几乎所有关于 IOKit 的内容都涉及创建和注册新的内核扩展、服务等——这些都与我的项目无关。

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

有什么帮助吗?提前致谢。

【问题讨论】:

    标签: iokit


    【解决方案1】:

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

    你走了多远?你的设备在 ioreg/IORegistryExplorer 中是什么样子的? (后者来自“Xcode的附加工具”,可从https://developer.apple.com/download/more/下载)

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

    HID 设备的工作方式是通过“报告”——具有灵活格式/布局的事件数据结构,通过设备的“报告描述符”定义。您的设备具有哪些按钮、输入轴等。

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

    如果您的设备不符合通用 USB HID 约定并使用一些自定义协议,您将需要自定义 kext(最高 macOS 10.14)或 dext(从 macOS 10.15 开始),这很可能会实现 @987654324 @子类。 open source Mac driver for the Xbox 360's game controller 就是此类驱动程序的一个示例,它的行为与标准 USB HID 设备不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-28
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多