Android USB Host API: размер буфера массовой передачи

Я пишу программное обеспечение дляcommunicate between tablet (Motorola Xoom с версией Android 4.0.3 и версией ядра 2.6.39.4)and a peripheral device using USB Host API предоставлено Android. Я использую только два типа общения:

control: controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout) bulk: bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

Управление передачей работает нормально, но у меня естьa problem with bulk transfer. I can use only 32768 as a size of the buffer for bulkTransfer function. It is not possible to use less or more. I know that I cannot use more because of the limit of the buffer pipe (size: 32769 bytes).

Это периферийное устройство передает данные, которые не правильно считываются функцией bulkTranfer. Я полагаю, что некоторые данные потеряны.

Я нахожу это:In Linux If a process attempts to read from an empty pipe (buffer), then read(2) will block until data is available. If a process attempts to write to a full pipe , then write(2) blocks until sufficient data has been read from the pipe to allow the write to complete.

Исходя из этого, мое объяснение проблемы состоит в том, что некоторые данные не записываются в pipe (буфер) из-за флага блокировки, сделанного функцией write (2). Я прав? Если это правда, я мог бы изменить трубу буфера.

My first solution for this problem is greater buffer. For kernel >= 2.6.35, you can change the size of a pipe with fcntl(fd, F_SETPIPE_SZ, size) but how can I find fd (file descriptor) for USB pipes? Second option is to use ulimit -p SIZE but parameter p for my kernel is not for pipe but process.

Кто-нибудь сталкивался с такой же проблемой, есть какие-то решения?

Ответы на вопрос(5)

Ваш ответ на вопрос