没有传出端点的USB-HID设备如何处理?

时间:2019-05-15 16:01:06

标签: java android usb-hid

我一直在研究USB-HID Java for Android插件,该插件需要与许多设备进行通信,并且使用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)

我看着: how is different between controlTransfer and bulkTransfer?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

作为参考,这里是HID spec.