小编Myu*_*rik的帖子

USBDriverKit驱动程序和客户端应用程序之间如何通信?

我们正在 macOS 上试验 DriverKit,而在 iPadOS 上 DriverKit 仍处于测试阶段。我们想要构建一个 iPad 驱动程序,允许我们的 iPad 应用程序与 USB 设备进行通信。

\n

我们做了什么:

\n
    \n
  1. 配置并实现了用作提供程序的驱动程序USBDriverKit::IOUSBHostInterface。当我们将设备插入 USB 端口时,macOS 会自动匹配/启动该驱动程序。接下来我们利用USBDriverKit::IOUSBHostPipe从我们的设备发送/接收数据。我们现在在日志中打印来自设备的数据。
  2. \n
  3. 研究DriverKit 扩展和客户端应用程序之间的通信
  4. \n
  5. 配置并实现了一个基于IOUserClientmacOS 应用程序并允许使用 API 打开通信通道的驱动程序IOServiceOpen。驱动程序有回调将数据传递到 macOS 客户端应用程序。
  6. \n
\n

目前,我们希望组合 2 个驱动程序,并使用回调将从 USB 设备接收到的数据传递到我们的客户端应用程序。不幸的是,我们陷入了困境,因为现在我们有 2 个驱动程序实例:

\n
    \n
  1. 当设备插入时,第一个实例由 macOS 自动运行
  2. \n
  3. virtual kern_return_t NewUserClient(uint32_t type, IOUserClient** userClient)当我们从客户端应用程序连接并调用方法时创建第二个实例。
  4. \n
\n

因此,我们不能使用第二个实例进行 USB 设备通信,因为它有错误的提供程序(IOUserClient),kern_return_t Start(IOService * provider)但我们需要IOUSBHostInterface启动:

\n
\xc2\xa0 \xc2\xa0 ivars->interface = …
Run Code Online (Sandbox Code Playgroud)

macos ipados driverkit

2
推荐指数
1
解决办法
1068
查看次数

标签 统计

driverkit ×1

ipados ×1

macos ×1