estoy escribiendo software para comunicarse entre tableta (Motorola Xoom con Android versión 4.0.3 y la versión del kernel 2.6.39.4) y un dispositivo periférico usando USB Host API proporcionada por Androide. Puedo utilizar sólo dos tipos de comunicación:Android USB Host API: Transferencia mayor tamaño del búfer
- de control:
controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)
- mayor:
bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)
transferencia de control funciona bien, pero tengo un problema con la transferencia a granel. Solo puedo usar 32768 como tamaño del buffer para la función bulkTransfer. No es posible usar menos o más. Sé que no puedo usar más debido al límite de la tubería del búfer (tamaño: 32769 bytes).
Este dispositivo periférico transmite datos que no son leídos correctamente por la función bulkTranfer. Supongo que algunos datos se pierden.
Y en base a eso, mi explicación del problema es que algunos datos no se escriben a la tubería (tampón) a causa de bloqueo bandera hecha por (2) función de escritura. ¿Estoy en lo correcto? Si esto es cierto, podría cambiar el buffer de tubería.
- Mi primera solución para este problema es una mayor memoria intermedia. For kernel >= 2.6.35, you can change the size of a pipe with
fcntl(fd, F_SETPIPE_SZ, size)
, pero ¿cómo puedo encontrarfd
(descriptor de archivo) para las tuberías USB ? - La segunda opción es usar
ulimit -p SIZE
pero el parámetrop
para mi kernel no es para pipe sino para proceso.
¿Alguien ha enfrentado el mismo problema, alguna solución?
usando la transferencia masiva, también estoy enfrentando el problema de pérdida de datos. mirándolo. Te lo haré saber una vez que encuentre la causa raíz. sigue actualizando el estado. – yokks
OK, gracias por la información. – syntagma
http://android.serverbox.ch/?p=370 ¿Puedes pasar por esta conversación? aquí se presenta una lógica para manejar datos entrantes. Espero que te ayude. – yokks