Я пишу программное обеспечение для обмена данными между таблетки (Motorola Xoom с Android версии 4.0.3 и ядра версии 2.6.39.4) и периферийным устройством с помощью USB Host API предоставленный Android. Я использую только два типа связи:Android USB Host API: объем передачи размер буфера
- управления:
controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)
- насыпной:
bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)
передача управления работает нормально, но у меня есть проблема с объемной передачи. Я могу использовать только 32768 в качестве размера буфера для функции bulkTransfer. Нельзя использовать меньше или больше. Я знаю, что больше не могу использовать из-за предела буферной трубы (размер: 32769 байт).
Это периферийное устройство передает данные, которые неправильно считываются функцией bulkTranfer. Я полагаю, что некоторые данные потеряны.
И основано на том, что мое объяснение проблемы заключается в том, что некоторые данные не записываются трубы (буфер) из-за блокировки флага сделанные записи (2) функции. Я прав? Если это правда, я могу изменить буфер буфера.
- Моим первым решением этой проблемы является больший буфер. For kernel >= 2.6.35, you can change the size of a pipe with
fcntl(fd, F_SETPIPE_SZ, size)
, но как я могу найтиfd
(файловый дескриптор) для USB-трубки? - Второй вариант заключается в использовании
ulimit -p SIZE
, но параметрp
для моего ядра не для трубы, а для процесса.
Кто-нибудь сталкивался с той же проблемой, какие-либо решения?
использование массового перевода, я также столкнулся с проблемой потери данных. смотря на это. Я сообщу вам, как только я найду причину. продолжайте обновлять статус. – yokks
ОК, спасибо за информацию. – syntagma
http://android.serverbox.ch/?p=370 можете ли вы пройти этот разговор? здесь представлена одна логика для обработки входящих данных. надеюсь, это поможет вам. – yokks