Пользовательский режим Изохронная передача по USB от устройства к хосту

В настоящее время я пытаюсь подключиться к аудиоустройству USB из страны пользователя. В настоящее время у меня есть полностью перечисленное устройство, и я установил интерфейс и установил альтернативный интерфейс для интерфейса, отличного от альтернативного интерфейса с нулевой пропускной способностью.

Во-первых, я должен сказать, что не могу использовать что-либо вроде libusb. Мне нужно было сделать это через файловую систему USB-устройства Linux.

Насколько я могу судить, я готов начать получать изохронные данные. Однако я могу найти очень мало информации о том, как выполнять изохронную передачу.

Насколько я могу судить, мне нужно заполнить структуру usbdevfs_urb, но я совершенно не уверен, как именно заполнить эту структуру.

Кроме того, после того, как я заполнил эту структуру, правильно ли я думаю, что мне нужно вызвать следующее:

int retSubmit   = ioctl( fd, USBDEVFS_SUBMITURB, &usbRequest );

, а затем после отправки я могу дождаться завершения запроса, используя

USBDEVFS_REAPURBNDELAY

В случае REAPURBNDELAY, что именно параметр, который мне нужно передать?

Я вообще лаю правильное дерево?

Любая информация будет принята с благодарностью.

Заранее спасибо!

Изменить:

Я пытаюсь выполнить изохронную передачу следующим образом:

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;

К сожалению, это дает мне ошибку -28 (ENOSPC).

<7>[ 3184.243163] usb 1-1: usbfs: usb_submit_urb returned -28

Я не могу понять, почему не хватает пропускной способности шины USB. Есть только 1 порт USB, и мое устройство - единственное устройство, подключенное к нему.

Есть мысли?

11
задан Goz 6 November 2011 в 23:31
поделиться