从设备到主机的用户模式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;

不幸的是,这给了我-28(ENOSPC)的错误。

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

我不明白为什么USB总线带宽不足。只有1个USB端口,并且我的设备是唯一插入其中的设备。

有什么想法吗?

回答:

好的,事实证明,问题出在Android

OS放置了一个HID驱动程序来处理HID控件。这似乎阻塞了带宽。从HID接口上卸下这些驱动程序会释放带宽,从而可以进行同步传输。

您可以通过执行以下操作来分离内核驱动程序:

usbdevfs_ioctl command;

command.ifno = mpInterface->GetInterfaceNumber();

command.ioctl_code = USBDEVFS_DISCONNECT;

command.data = NULL;

int ret = ioctl( fd, USBDEVFS_IOCTL, &command );

否则我所做的是正确的。

以上是 从设备到主机的用户模式USB等时传输 的全部内容, 来源链接: utcz.com/qa/429040.html

回到顶部