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

问题描述

我正在 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 的经验并不丰富,所以这对我来说并不容易。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...