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