我正在尝试从Android中定制的USB设备(作为从设备)读取数据 . 我能够使用以下代码将数据写入设备:
UsbRequest request = new UsbRequest();
request.initialize(_outConnection, _outEndpoint);
int bufferDataLength = _outEndpoint.getMaxPacketSize();
ByteBuffer buffer = ByteBuffer.allocate(bufferDataLength + 1);
buffer.put(bytes);
if (request.queue(buffer, bufferDataLength)) {
UsbRequest req = _outConnection.requestWait(); }
我在设备连接的调试板上看到了结果 . 我正在尝试使用相同的方法来读取数据,但显然这不起作用:
int siz = 1;
ByteBuffer res = ByteBuffer.allocate(siz + 1);
UsbRequest request = new UsbRequest();
request.initialize(_inConnection, _inEndpoint);
request.queue(res, siz); // This return false always
我究竟做错了什么?我不知道发送回的数据包的大小 - 但我假设我总是能够读取1个字节 .
我的设备有HID接口,有两个中断 endpoints (IN和OUT)
1 回答
我不知道是什么解决了这个问题,但现在它有效了 . 我从头开始重写了一切 . 我想我没有使用这个代码(我认为它是用于用户通知而我不需要它 . 但看起来它是其他东西) - 这是它无法工作的主要原因:
我做过的一些事情和帮助我实现稳定连接的事情是:
1)每次需要时关闭并打开连接 . 我知道这听起来很奇怪,但这是我能让它保持稳定的唯一方法 . 如果我尝试使用长期连接,由于某种原因它会被破坏并在一段时间后停止工作 .
2)在永不停止的while循环中连续读取 . 我还在我的所有线程中进行了一些短暂的睡眠 - 这有助于以更实时的方式阅读 .
3)锁定设备(同步) . 我没有同时打开写入和读取连接 .
我没有为这个项目分配太多时间,这个项目只是一个演示 - 所以这一切都很适合我们 . 我想如果花一点时间,其中一些东西可能会改写成更好的东西 .