Я пишу программное обеспечение для связи между планшетом(Motorola Xoom с версией Android 4.0.3 и ядром версии 2.6.39.4) и периферийным устройством с использованием USB Host API предоставлено Android. Я использую только два типа связи:
controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)
bulkTransfer(конечная точка UsbEndpoint, byte[] буфер, длина int, тайм-аут int)
Передача управления работает нормально, но у меня проблема с массовой передачей. Я могу использовать только 32768 в качестве размера буфера для функции bulkTransfer.Невозможно использовать меньше или больше. Я знаю, что не могу использовать больше из-за ограничения буферного канала (размер: 32769 байт).
Это периферийное устройство передает данные, которые неправильно считываются функцией bulkTransfer. Я предполагаю, что некоторые данные потеряны.
Исходя из этого, мое объяснение проблемы состоит в том, что некоторые данные не записываются в канал (буфер) из-за флага блокировки, установленного функцией write(2). Я прав? Если это правда, я мог бы изменить буфер канала.
fcntl(fd, F_SETPIPE_SZ, size)
, но как мне найти fd
(дескриптор файла) для
USB трубы?ulimit -p SIZE
, но параметр p
для моего ядра не для канала, а для процесса.Кто-нибудь сталкивался с такой же проблемой, есть решения?