我一直在研究USB-HID Java for Android插件,该插件需要与许多设备进行通信,并且使用bulkTransfer()方法取得了很大的成功。
直到我遇到没有任何外向端点的硬件设备为止。这个特定的接口有2个接口,每个接口有1个端点。两者都是传入的,因此无法使用bulkTransfer()向其发送命令。
我的问题:
1)是否可以使用controlTransfer()方法向设备发送相同的命令?
2)我可以使用传递给bulkTransfer()的相同字节数组吗?
3)如果以上两个条件都成立,那么value和index参数在controlTransfer()上做什么?
我看着: how is different between controlTransfer and bulkTransfer?
但是它并没有真正回答我的主要问题。
答案 0 :(得分:1)
首先请注意,HID倾向于使用中断IN而不是批量传输。这与控制管或散装管不同。当您移动鼠标或键盘(通常)时,它将向您的计算机发送一个中断消息,因此操作系统不必不断轮询控制管道以获取报告。在android中,这是通过queue
/ requestWait
完成的。
我个人从未见过带有散装管道的HID。
所有设备的端点0为双向控制管道。如果控制设备的固件,则可以在控制管道上发送自定义命令。因此,从理论上讲,您可以这样做并使用相同的字节数组。但是您需要知道设备在请求ID,索引和值方面的期望。索引可能为0(接口描述符; UsbInterface.getId
)。值还取决于您的设备期望的值(尝试0)。
作为参考,这里是HID spec.