Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上使用UsbDeviceConnection从HID设备请求USB HID报告描述符_Android_Usb_Hid - Fatal编程技术网

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

如何在Android上使用UsbDeviceConnection从HID设备请求USB HID报告描述符,android,usb,hid,Android,Usb,Hid,我正在尝试使用UsbDeviceConnection.controlTransfer获取USB设备的HID报告描述符,以便查看USB HID设备有哪些按钮 我已经能够通过使用bulkTransfer从HID设备获取实际输入数据 我已经查过了,只能找到创建和解析HID报告描述符的教程。我试着在不同的周长内进入controlTransfer,但我一直无法找到答案 我应该将哪些值传递到controlTransfer以获取USB HID报告描述符,这样我就可以开始解析设备有哪些按钮以及它们分配给哪些字节

我正在尝试使用
UsbDeviceConnection.controlTransfer
获取USB设备的HID报告描述符,以便查看USB HID设备有哪些按钮

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

我已经查过了,只能找到创建和解析HID报告描述符的教程。我试着在不同的周长内进入
controlTransfer
,但我一直无法找到答案


我应该将哪些值传递到
controlTransfer
以获取USB HID报告描述符,这样我就可以开始解析设备有哪些按钮以及它们分配给哪些字节?或者您不应该使用
controlTransfer
获取HID报告描述符吗?我刚开始使用USB。

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

UsbDeviceConnection.controlTransfer
需要7个变量:

  • 请求类型
  • 请求
  • 请求值
  • 请求索引
  • 输出缓冲区
  • 缓冲区大小
  • 超时
请求类型描述传输的方向、类型和收件人。在本例中,我们希望使用标准(00)传输读取(1),并希望查询接口(00001)。我们想查询接口,因为HID是设备的接口。因此,
0b10000001
0x81

请求描述了我们的具体请求。我们正在寻找HID报告描述符,
GET\u描述符
被规范定义为
0x06

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

请求索引指定要查询的接口。如果HID是设备的唯一接口,则这将是
0x00
。否则,您必须检查配置描述符中可用接口的类型及其索引

输出缓冲区是分配给事务返回的空间,应为缓冲区大小指定的大小,如下所述

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

Timeout是放弃的毫秒数。我使用了
2000

把这些放在一起,
UsbDeviceConnection.controltransfer(0x81、0x06、0x2200、0x00,byte[]buffer,1042000)

提供了
controlTransfer
中使用的位字段的极好概述,如果需要更多上下文,请查看


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

谢谢,我用一个通用USB游戏板测试了它,它成功了。你知道如何使用上述方法(UsbDeviceConnection.ControlTransfer)在USB读卡器中发出嘟嘟声吗?