在 MacOS 应用程序中解析 USB HID 报告描述符

时间:2020-12-30 16:28:50

标签: macos usb hid iokit driverkit

我正在 MacOS 应用程序中处理 USB HID 报告(在 Swift 中使用 IOKit)。

我有一个类似于下面的方法,用于访问设备的报告描述符数据,当它被 IOHIDManager 枚举时。

let deviceMatchingCallback: IOHIDDeviceCallback = { context, result, _, device in
  let descriptor = IOHIDDeviceGetProperty(device, kIOHIDReportDescriptorKey as CFString);
  let cfData = descriptor as! CFData;
  let data = cfData as Data;
            
  // Print out report in hex (i.e 0x05, 0x01, etc)
  // Then convert to report here - https://eleccelerator.com/usbdescreqparser/
  print("string", data.map { String(format: "0x%02hhX", $0) }.joined(separator: ","));
                                                   
  // Iterate individual bytes of the report
  let bytesPointer:UnsafePointer<UInt8> = CFDataGetBytePtr(cfData);
  let length = CFDataGetLength(cfData);
  let buffer = UnsafeBufferPointer<UInt8>(start: bytesPointer, count: length);   
  for (_, byte) in buffer.enumerated() {
    print(byte)
  }                                           
}

IOKit 或其他东西中是否有任何 HID 报告描述符解析助手可供我在 Swift 中使用?

常识告诉我一定有,但不幸的是,谷歌搜索或搜索 Apple 文档并没有让我找到任何地方。

我目前的下一步是继续基于 LUFA's implementation 创建我自己的,但我很想节省时间(尽管这将是一个很好的学习机会)。

我确实考虑过导入这个 LUFA,但它附带了一些与我的架构(即 AVR)无关的依赖项。我对普通 C 的经验并不丰富,所以这对我来说并不容易。

0 个答案:

没有答案