android - 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,有人有同样的问题吗?
解决方案
假设:您的 USB 设备符合USB CCID Device Class。如果不是这样,您将需要为您的特定读卡器提供数据表。
在您可以执行与 USB 端点的任何通信之前,您的应用程序必须首先声明该接口。换句话说,在发送任何请求之前,您的代码中应该调用claimInterface()。
接下来,您将混合两种不同形式的通信。您的应用应要么
UsbRequest
用于异步使用,要么bulkTransfer()
用于同步使用。UsbRequest
如果您正在使用,则不需要初始化 abulkTransfer()
。您应该验证您的最大数据包大小是多少
UsbEndpoint
。Bulk CCID 端点最多可支持 512 字节的数据包,因此 16 字节的固定长度可能不足以读取完整的数据包响应(假设此事务在 Bulk IN 端点上)。将您的数组大小与端点的数据包大小相匹配。
推荐阅读
- apache-spark - 我的 spark-submit 选项应该是什么以获得更好的性能和现在的堆内存问题
- android - 无法解析 PersianMaterialDateTimePicker
- python - 在 Python 中使用 Selenium 或 PIL 获取特定 CSS 类的图像大小
- database - 带有课程和比赛的事件的数据库模型
- sql - 使用 SQL 的多级映射(或树层次结构)
- docker - Teradata 数据库 Docker 映像
- java - 从其他设备运行时java邮件程序不起作用
- html - div元素中的footer元素和header元素会成为div元素的header和footer吗?
- xamarin - 有没有办法可以在我的 C# 代码中访问静态资源?
- angular - ngrx 不保持状态