Android上的USB HID

时间:2013-02-05 15:38:35

标签: java android usb hid

我正在尝试从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个字节。

我的设备有两个中断端点(IN和OUT)的HID接口

1 个答案:

答案 0 :(得分:1)

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

// 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)锁定设备(同步)。我不同时打开写入和读取连接。

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