如何进入Android Usb主机主机发送命令后的Usb设备响应?

Mar*_*och 7 android usb-hostcontroller android-usb

按照简单的教程我可以连接到设备(带有ADNS-5000芯片的usb光学鼠标)并制作批量传输.

UsbInterface intf = device.getInterface(0);
UsbEndpoint endpoint = intf.getEndpoint(0);
UsbDeviceConnection connection = manager.openDevice(device);
connection.claimInterface(intf, forceClaim);
connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); //do in another thread
Run Code Online (Sandbox Code Playgroud)

ADNS-5000规范(可以用google搜索)定义了一些"USB命令",例如:

助记符:Get_Status_Device

命令:80 00 00 00 00 00 02 00

注意:通常返回00 00,自供电00 00,远程唤醒02 00

所以我理解为:当我写数据时:

private byte[] bytes = {(byte) 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00};
Run Code Online (Sandbox Code Playgroud)

我应该得到的设备0x00, 0x000x00, 0x00 (这可能是规范中的错误,因为这个字节序列被定义为两个不同状态的结果)0x20, 0x00作为回报,但我没有看到任何方式api返回任何东西,我是对的吗?

Dar*_*ric 0

我快速浏览了 ADNS-5000 规范。有一件事是肯定的,您有 IN 和 OUT 端点可用。

Get_Status_Endpt0 82 00 00 00 xx 00 02 00 OUT: xx=00, IN: xx=80 通常返回 00 00

这意味着命令(没有 API)可以返回结果。

我能想到的唯一方法是将命令写入 OUT 端点并从 IN 端点读取(通过轮询)状态(命令执行后)。

这是我在几个项目中使用过的东西,非常好。我不确定 ADNS-5000,因为我还没有检查 USB 协议详细信息。

希望能帮助到你。