Android Host USB API: tamaño del búfer de transferencia masiva

Estoy escribiendo software paracomunicarse entre tableta (Motorola Xoom con Android versión 4.0.3 y Kernel versión 2.6.39.4)y un dispositivo periférico utilizando USB Host API proporcionado por Android. Uso solo dos tipos de comunicación:

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

Control de transferencia funciona bien, pero tengoun problema con la transferencia a granel. Puedo usar solo 32768 como tamaño del búfer para la función bulkTransfer. No es posible usar menos o más. Sé que no puedo usar más debido al límite del conducto de búfer (tamaño: 32769 bytes).

Este dispositivo periférico transmite datos que no se leen correctamente mediante la función bulkTranfer. Supongo que se pierden algunos datos.

Encuentro esto:En Linux Si un proceso intenta leer desde una tubería vacía (búfer), entonces la lectura (2) se bloqueará hasta que los datos estén disponibles. Si un proceso intenta escribir en una tubería completa, entonces escriba (2) bloques hasta que se hayan leído suficientes datos de la tubería para permitir que la escritura se complete.

Y en base a eso, mi explicación del problema es que algunos datos no se escriben en pipe (búfer) debido a la marca de bloqueo realizada por la función write (2). ¿Estoy en lo correcto? Si esto es cierto podría cambiar el buffer de tubería.

Mi primera solución para este problema es un búfer mayor.Para kernel> = 2.6.35, puede cambiar el tamaño de una tubería confcntl(fd, F_SETPIPE_SZ, size) pero como puedo encontrarfd (descriptor de archivo) para tuberías USB?La segunda opción es usarulimit -p SIZE pero parametrop Para mi núcleo no es para tubería sino para proceso.

¿Alguien ha enfrentado el mismo problema, alguna solución?

Respuestas a la pregunta(5)

Su respuesta a la pregunta