首页 文章

Android上的USB HID

提问于
浏览
1

我正在尝试从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 回答

  • 0

    我不知道是什么解决了这个问题,但现在它有效了 . 我从头开始重写了一切 . 我想我没有使用这个代码(我认为它是用于用户通知而我不需要它 . 但看起来它是其他东西) - 这是它无法工作的主要原因:

    // Create and intent and request a permission.
        PendingIntent mPermissionIntent = PendingIntent.getBroadcast(_context, 0, new Intent(ACTION_USB_PERMISSION), 0);
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        _context.registerReceiver(mUsbReceiver, filter);
    

    我做过的一些事情和帮助我实现稳定连接的事情是:

    1)每次需要时关闭并打开连接 . 我知道这听起来很奇怪,但这是我能让它保持稳定的唯一方法 . 如果我尝试使用长期连接,由于某种原因它会被破坏并在一段时间后停止工作 .

    2)在永不停止的while循环中连续读取 . 我还在我的所有线程中进行了一些短暂的睡眠 - 这有助于以更实时的方式阅读 .

    3)锁定设备(同步) . 我没有同时打开写入和读取连接 .

    我没有为这个项目分配太多时间,这个项目只是一个演示 - 所以这一切都很适合我们 . 我想如果花一点时间,其中一些东西可能会改写成更好的东西 .

相关问题