-1

我一直在为需要与许多设备通信的 Android 插件开发 USB-HID Java,并且我使用 bulkTransfer() 方法取得了大部分成功。

直到我遇到一个没有任何传出端点的硬件设备。这个特定的接口有 2 个接口,每个接口有 1 个端点。两者都是传入的,因此无法使用 bulkTransfer() 向它发送命令。

我的问题:

1) 是否可以使用 controlTransfer() 方法向设备发送相同的命令?

2) 我可以使用传递给 bulkTransfer() 的相同字节数组吗?

3)如果以上都为真,那么value和index参数对controlTransfer()的作用是什么:

https://developer.android.com/reference/android/hardware/usb/UsbDeviceConnection.html#controlTransfer(int,%2520int,%2520int,%2520int,%2520byte%5B%5D,%2520int,%2520int)

我看了看: controlTransfer 和 bulkTransfer 有什么不同?

但它并没有真正回答我的主要问题。

4

1 回答 1

1

首先需要说明的是,HID 倾向于使用中断 IN 而不是批量传输。这与控制管道或散装管道不同。当您移动鼠标或键盘(通常)时,它会向您的计算机发送中断消息,因此操作系统不必不断地轮询控制管道以获取报告。在 android 中,这是通过queue/完成的requestWait

我个人从未见过带有散装管道的 HID。

所有设备都有端点 0,它是一个双向控制管道。如果您控制设备的固件,则可以在控制管道上发送自定义命令。所以理论上,你可以这样做并使用相同的字节数组。但是您需要知道您的设备在请求 id、索引和值方面的期望。索引可能为 0(接口描述符;UsbInterface.getId)。值还取决于您的设备所期望的(尝试 0)。

作为参考,这里是HID 规范。

于 2019-05-15T20:24:13.373 回答