Как определить длину полученных байтов метода UsbRequest.queue (..)? - PullRequest
6 голосов
/ 02 августа 2011

У меня проблемы с классом UsbRequest в Android 3.1.

Это мой код:

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 ]

5 голосов
/ 06 февраля 2013

Это ошибка в Android . В ограниченных версиях нет обходного пути, потому что реализация просто не передает длину.

В JB-MR1 было исправлено (уровень API 17 и выше).

3 голосов
/ 02 сентября 2011

Мне кажется, что текущий асинхронный USB API не имеет способа вернуть размер чтения. 2 «обходные пути» используют синхронные передачи, поскольку там вы получаете количество прочитанных / записанных байтов или, возможно, протокол, который вы реализуете, отправляет вам количество байтов, которые вы получите. Например. В настоящее время я реализую что-то, где каждый пакет более высокого уровня, который я получаю, имеет количество байтов в первых 4 байтах пакета. На основании этого числа я знаю, нужно ли мне читать несколько раз.

1 голос
/ 31 октября 2012

Вы можете использовать request.queue(buffer, bufferLength);.Это должно решить вашу проблему.Теперь вам следует обратиться к документации по Android, она хорошо документирована и полезна.

0 голосов
/ 02 августа 2011

Я считаю, buffer.limit() должно возвращать количество полученных байтов.Это работает?

...