我目前正在尝试与用户陆地的USB音频设备连接.我现在已经完全枚举了设备,并且我已经设置了接口并将接口设置为接口非零带宽备用接口.
首先,我不得不说我不能使用像libusb这样的东西.我想通过Linux的USB设备文件系统来做到这一点.
所以据我所知,我已经准备好开始接收等时数据了.但是我找不到关于如何进行等时传输的信息.
据我所知,我需要填充一个usbdevfs_urb结构,但我完全不确定如何填充这个结构.
此外,一旦我填写了这个结构,我认为我需要调用以下内容:
int retSubmit = ioctl( fd, USBDEVFS_SUBMITURB, &usbRequest );
Run Code Online (Sandbox Code Playgroud)
然后一旦提交,我可以等待请求完成使用
USBDEVFS_REAPURBNDELAY
Run Code Online (Sandbox Code Playgroud)
在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;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给了我一个-28(ENOSPC)的错误.
<7>[ 3184.243163] usb …
Run Code Online (Sandbox Code Playgroud)