Interfejs API hosta USB systemu Android: rozmiar bufora przesyłania masowego
Piszę oprogramowanie dokomunikować się między tabletem (Motorola Xoom z Androidem w wersji 4.0.3 i Kernel w wersji 2.6.39.4)oraz urządzenie peryferyjne z interfejsem API hosta USB dostarczone przez Android. Używam tylko dwóch rodzajów komunikacji:
kontrola:controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)
objętość: bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)
Transfer kontroli działa dobrze, ale mamproblem z przesyłaniem zbiorczym. Mogę użyć tylko 32768 jako wielkości bufora dla funkcji bulkTransfer. Nie można użyć mniej lub więcej. Wiem, że nie mogę użyć więcej z powodu ograniczenia rury buforowej (rozmiar: 32769 bajtów).
To urządzenie peryferyjne przesyła dane, które nie są poprawnie odczytywane przez funkcję bulkTranfer. Przypuszczam, że niektóre dane zostaną utracone.
I na tej podstawie moje wyjaśnienie problemu polega na tym, że niektóre dane nie są zapisywane w potoku (buforze) z powodu flagi blokującej utworzonej przez funkcję write (2). Mam rację? Jeśli to prawda, mogę zmienić bufor rury.
Moim pierwszym rozwiązaniem tego problemu jest większy bufor.Dla jądra> = 2.6.35 możesz zmienić rozmiar potokufcntl(fd, F_SETPIPE_SZ, size)
ale jak mogę znaleźćfd
(deskryptor pliku) dla rur USB?Druga opcja to użycieulimit -p SIZE
ale parametrp
moje jądro nie jest przeznaczone dla potoku, ale dla procesu.Czy ktoś napotkał ten sam problem, jakieś rozwiązania?