繁体   English   中英

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

[英]How are USB-HID devices handled that have no outgoing endpoints?

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

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

我的问题:

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

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

3)如果以上都成立,则controlTransfer()上的value和index参数有什么作用:

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM