我正在尝试用于UsbDeviceConnection.controlTransfer获取 USB 设备的 HID 报告描述符,以便我可以看到 USB HID 设备具有哪些按钮。
我已经能够通过使用bulkTransfer.
我查了一下,只能找到创建和解析 HID 报告描述符的教程。我试过在不同的范围内进入controlTransfer,但我一直无法弄清楚。
我应该传递什么值controlTransfer来获取 USB HID 报告描述符,以便我可以开始解析设备具有哪些按钮以及它们分配给哪些字节?或者你不应该用来controlTransfer获取 HID 报告描述符?我是使用 USB 的新手。
小智 5
这真的很晚了,但如果您还没有提出解决方案或其他人正在寻求这样做,这就是我的解决方案。我应该提一下,我对这方面的经验不是很丰富,所以可能会丢失一些细节,但大致情况是存在的。
UsbDeviceConnection.controlTransfer 需要 7 个变量:
请求类型描述了传输的方向、类型和接收者。在这种情况下,我们希望使用标准 (00) 传输读取 (1),并且希望查询接口 (00001)。我们要查询一个接口,因为 HID 是设备的一个接口。所以,0b10000001或0x81。
请求描述了我们的具体请求。我们正在寻找 HID 报告描述符并GET_DESCRIPTOR按照0x06规范进行定义。
请求值由描述符类型作为高字节和接口索引作为低字节组成。在我们的例子中,描述符类型是 HID 报告或0x22(这是来自 HID 规范,特别是类描述符)。接口索引与下面的请求索引相同。在我的情况下是0x00,但你的可能不同。结合高位和低位,我们得到0x2200我们的请求值。
请求索引指定您正在查询的接口。如果 HID 是设备的唯一接口,那么这将是0x00. 否则,您将不得不检查可用接口类型及其索引的配置描述符。
输出缓冲区是为事务返回分配的空间,其大小应由缓冲区大小指定,如下所述。
缓冲区大小描述了报告描述符中的字节数。该值在配置描述符中指定,在 HID 类特定描述符 ( bDescriptorType= 0x21) 中,并且是wDescriptorLength9个字节中第 8 个字节 ( )的值。在我的例子中,这个值是 104。
超时是放弃的毫秒数。我用过2000。
把这个放在一起,UsbDeviceConnection.controlTranfer(0x81, 0x06, 0x2200, 0x00, byte[] buffer, 104, 2000)。
https://www.beyondlogic.org/usbnutshell/usb6.shtml很好地概述了 中使用的位字段controlTransfer,如果您需要更多上下文,请查看。
https://eleccelerator.com/usbdescreqparser/是了解 USB 和 HID 描述符的非常有用的工具,可能比单独阅读规格表和 API 更有见地。
| 归档时间: |
|
| 查看次数: |
3192 次 |
| 最近记录: |