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. Я полагаю, что некоторые данные потеряны.
Исходя из этого, мое объяснение проблемы состоит в том, что некоторые данные не записываются в 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 withfcntl(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.
Кто-нибудь сталкивался с такой же проблемой, есть какие-то решения?