首页 > 解决方案 > Android of Things 与 USB 外设通信

问题描述

我从 AoT 开始了我的冒险(我有基本的工具包)。我尝试实现的第一个想法是通过 USB 与读卡器(USB 读卡器 HID Prox v3)进行通信。

但我没有正确理解。

这是“示例”代码:

 usbRequest = new UsbRequest();
 usbConnection = mUsbManager.openDevice(device);
usbRequest.initialize(usbConnection, device.getInterface(0).getEndpoint(0));//communication from card scanner
//In handler:
  byte[] byteArray = new byte[16];
            int transfer = usbConnection.bulkTransfer(device.getInterface(0).getEndpoint(0), byteArray, 16, 300);

转移结果= -1,有人有同样的问题吗?

标签: androidusbandroid-things

解决方案


假设:您的 USB 设备符合USB CCID Device Class。如果不是这样,您将需要为您的特定读卡器提供数据表。

  1. 在您可以执行与 USB 端点的任何通信之前,您的应用程序必须首先声明该接口。换句话说,在发送任何请求之前,您的代码中应该调用claimInterface()

  2. 接下来,您将混合两种不同形式的通信。您的应用应要么UsbRequest用于异步使用,要么bulkTransfer()用于同步使用。UsbRequest如果您正在使用,则不需要初始化 a bulkTransfer()

  3. 您应该验证您的最大数据包大小是多少UsbEndpoint。Bulk CCID 端点最多可支持 512 字节的数据包,因此 16 字节的固定长度可能不足以读取完整的数据包响应(假设此事务在 Bulk IN 端点上)。将您的数组大小与端点的数据包大小相匹配。


推荐阅读