Actualmente estoy tratando de hacer interfaz con un dispositivo de audio USB desde el usuario. Actualmente tengo el dispositivo completamente enumerado y configuré la interfaz y configuré la interfaz alternativa para la interfaz alternativa de ancho de banda distinto de cero.Modo de usuario Transferencia isócrona USB de dispositivo a servidor
En primer lugar, tengo que decir que no puedo usar nada como libusb. Tengo que hacer esto a través del sistema de archivos de dispositivos USB de Linux.
Por lo que puedo ver, estoy listo para comenzar a recibir datos isócronos. Sin embargo, puedo encontrar muy poca información sobre cómo hacer una transferencia isócrona.
Por lo que puedo decir, necesito completar una estructura usbdevfs_urb, pero no estoy seguro de cómo exactamente llenar esta estructura.
Además, una vez que me he llenado esta estructura estoy en lo cierto al pensar que tengo que llamar al siguiente:
int retSubmit = ioctl(fd, USBDEVFS_SUBMITURB, &usbRequest);
y luego una vez presenté puedo esperar a que la solicitud para completar usando
USBDEVFS_REAPURBNDELAY
En el caso de REAPURBNDELAY, ¿cuál es exactamente el parámetro que necesito aprobar?
¿Incluso estoy ladrando en el árbol correcto?
Cualquier información sería muy apreciada.
¡Gracias de antemano!
Editar:
que intento hacer la transferencia isócrona de la siguiente manera:
usbdevfs_urb& urbRequest = *(usbdevfs_urb*)malloc(384);
urbRequest.type = USBDEVFS_URB_TYPE_ISO;
urbRequest.endpoint = mpEndpoint->GetEndpointAddress();//mpEndpoint->GetEndpointIndex();
urbRequest.status = 0;
urbRequest.flags = USBDEVFS_URB_ISO_ASAP;
urbRequest.buffer = pData;
urbRequest.buffer_length = 0;
urbRequest.actual_length = 0;
urbRequest.start_frame = 0;
urbRequest.number_of_packets = 1;
urbRequest.error_count = 0;
urbRequest.signr = 0;
urbRequest.usercontext = pData;
usbdevfs_iso_packet_desc* pIsoPacketDesc = &urbRequest.iso_frame_desc[0];
pIsoPacketDesc->length = 384;
pIsoPacketDesc->actual_length = 0;
pIsoPacketDesc->status = 0;
Unfgortunately esto me da un error de -28 (ENOSPC).
<7>[ 3184.243163] usb 1-1: usbfs: usb_submit_urb returned -28
No entiendo por qué no habría suficiente ancho de banda del bus USB. Solo hay 1 puerto usb y mi dispositivo es el único conectado.
¿Alguna idea?
¿Por qué no puedes usar libusb? –
@Jim Clay Porque la plataforma específica en cuestión es android y ya tengo un descriptor de archivo abierto y no puedo, debido a los permisos, abrir un dispositivo usando libusb ... – Goz
Hola Goz, actualmente estoy tratando de resolver el mismo problema - el de las transferencias isócronas en Android, evitando libusb. ¿Hay alguna manera de publicar una muestra de código de trabajo? Mi punto de fricción actualmente son las definiciones de estructura y los valores de solicitud. ¿De dónde sacas estos? Gracias por adelantado. – Gusdor