我目前正在嘗試從用戶用地連接USB音頻設備。我目前已經完全列舉了該設備,並且已經設置了接口並將接口設置爲接口非零帶寬替代接口。用戶模式從設備到主機的USB等時傳輸
首先,我必須說我不能使用像libusb這樣的東西。我需要通過Linux的USB設備文件系統來做到這一點。
因此,據我所知,我已準備好開始接收等時數據。但是,我可以找到有關如何執行同步傳輸的信息很少。
從我可以告訴我需要填充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;
Unfgortunately這給了我-28(ENOSPC)錯誤。
<7>[ 3184.243163] usb 1-1: usbfs: usb_submit_urb returned -28
我不明白爲什麼沒有足夠的USB總線帶寬。只有1個USB端口,我的設備是唯一插入它的設備。
有什麼想法?
爲什麼你不能使用libusb? –
@Jim Clay因爲有問題的特定平臺是Android和我已經有一個開放的文件描述符,我不能,由於權限,使用libusb打開一個設備... – Goz
嗨Goz,我目前正試圖解決同樣的問題 - 在android上同步傳輸,避免libusb。有什麼方法可以發佈有效的代碼示例嗎?我現在的關鍵點是結構定義和請求值。你在哪裏採購這些?提前致謝。 – Gusdor