如何确定UsbRequest.queue(..)方法的接收字节长度?

时间:2011-08-02 16:49:34

标签: android usb communication bytebuffer

我在Android 3.1中遇到UsbRequest类问题。

这是我的代码:

ByteBuffer buffer = ByteBuffer.allocate(4096);
buffer.order(ByteOrder.LITTLE_ENDIAN);
UsbRequest request = new UsbRequest();
request.initialize(mConnection, mEndpointIn);
request.queue(buffer, 4096);

if (mConnection.requestWait() == request) {
   byte[] data = buffer.array();
}

数组data的大小为4096,但实际接收的字节长度要小得多。

如何确定实际接收字节的大小?

感谢。

4 个答案:

答案 0 :(得分:5)

这是bug in Android。在受折磨的版本中,没有解决方法,因为实现只是没有通过长度。

JB-MR1中的fixed(API级别17以上)。

答案 1 :(得分:3)

在我看来,当前的异步USB API无法返回读取大小。 2“变通办法”使用同步传输,因为您会收到读/写的字节数,或者您正在实现的协议会向您发送您将收到的字节数。例如。我目前正在实现一些功能,其中我收到的每个更高级别的数据包都包含数据包前4个字节的字节数。基于这个数字,我知道我是否必须进行多次读取。

答案 2 :(得分:1)

您可以使用request.queue(buffer, bufferLength);。这应该可以解决您的问题。现在,你应该参考android文档,它有很好的文档和帮助。

答案 3 :(得分:0)

我相信buffer.limit()应该返回接收的字节数。这有用吗?