gpt4 book ai didi

android - 如何在 Android 上使用 UsbDeviceConnection 从 HID 设备请求 USB HID 报告描述符

转载 作者:行者123 更新时间:2023-12-04 01:52:50 28 4
gpt4 key购买 nike

我正在尝试使用 UsbDeviceConnection.controlTransfer 获取 USB 设备的 HID 报告描述符,这样我就可以看到 USB HID 设备有哪些按钮。

我已经能够使用 bulkTransfer 从 HID 设备获取实际输入数据。

我查了一下,只能找到创建和解析 HID 报告描述符的教程。我试过将不同的边界输入到 controlTransfer 中,但一直无法弄清楚。

我应该将什么值传递给 controlTransfer 以获取 USB HID 报告描述符,以便我可以开始解析设备具有的按钮以及分配给它们的字节?还是您不应该使用 controlTransfer 来获取 HID 报告描述符?我刚开始使用 USB。

最佳答案

这真的很晚了,但如果您还没有想出解决方案或其他人正在寻找解决方案,这就是我的解决方案。我应该提一下,我对这些都不是很有经验,所以一些细节可能不对,但总体情况是存在的。

UsbDeviceConnection.controlTransfer 需要 7 个变量:

  • 请求类型
  • 要求
  • 请求值
  • 请求索引
  • 输出缓冲区
  • 缓冲区大小
  • 超时

请求类型描述了传输的方向、类型和接收者。在这种情况下,我们想要使用标准 (00) 传输读取 (1) 并且我们想要查询接口(interface) (00001)。我们要查询接口(interface),因为 HID 是设备的接口(interface)。所以,0b100000010x81

Request 描述了我们的具体要求。我们正在寻找 HID 报告描述符GET_DESCRIPTOR 被规范定义为 0x06

请求值由描述符类型高字节和接口(interface)索引低字节组成。在我们的例子中,描述符类型是 HID Report 或 0x22(这是来自 HID 规范,特别是类描述符)。接口(interface)索引与下面的请求索引相同。在我的例子中它是 0x00,但你的可能不同。结合高位和低位,我们得到 0x2200 作为我们的请求值。

Request index指定你查询的是哪个接口(interface)。如果 HID 是设备的唯一接口(interface),那么这将是 0x00。否则,您将不得不检查可用接口(interface)类型及其索引的配置描述符。

输出缓冲区是为交易返回分配的空间,其大小应由缓冲区大小指定,如下所述。

缓冲区大小描述了报告描述符中的字节数。该值在配置描述符中指定,在 HID 类特定描述符 (bDescriptorType = 0x21) 中,并且是第 8 个字节 (wDescriptorLength) 总共 9 个。在我的例子中,这个值是 104。

Timeout 是多少毫秒后放弃。我使用了 2000

将它们放在一起,UsbDeviceConnection.controlTranfer(0x81, 0x06, 0x2200, 0x00, byte[] buffer, 104, 2000)

https://www.beyondlogic.org/usbnutshell/usb6.shtmlcontrolTransfer 中使用的位字段进行了很好的概述,如果您需要更多上下文,请查看它。

https://eleccelerator.com/usbdescreqparser/是理解 USB 和 HID 描述符的非常有用的工具,可能比单独阅读规范表和 API 更有见地。

关于android - 如何在 Android 上使用 UsbDeviceConnection 从 HID 设备请求 USB HID 报告描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52106252/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com