当前位置: 首页 > 面试题库 >

从设备到主机的用户模式USB等时传输

宓弘壮
2023-03-14
问题内容

我目前正在尝试与用户土地上的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 );

否则我所做的是正确的。



 类似资料:
  • 我正在尝试从连接到主机模式下的Android手机的USB设备中获取一些数据。我可以发送数据到它,但读取失败。 我一直从方法获得,它指示某种错误,它总是超时。也许问题来自于连接配置,我试了几次(读作:试错),没有一次奏效,令人惊讶的是,我不需要任何配置来发送数据到设备。 编辑 还必须注意的是,我使用的电缆是micro-USB到micro-USB的,它只能以一种方式工作,即只有当插头A连接到电话和插头

  • 简介 USB 即 Universal Serial Bus 是一种支持热插拔的通用串行总线,在 USB 体系中又分为 USB Host 和 USB Device。本文将基于 stm32l475-atk-pandora 开发板,讲解基于 RT-Thread Studio 开发 USB Device 驱动。 USB Device 设备驱动的开发可总结为如下几个步骤: 新建 RT-Thread 完整版项

  • 上次我检查时,Docker没有任何方法让容器访问主机串行或USB端口。有没有什么诀窍可以让你这么做?

  • 问题内容: 上次我检查时,Docker没有任何方法允许容器访问主机串行或USB端口。有没有办法做到这一点? 问题答案: 有两种选择。您可以使用可用于访问无模式USB设备的标志: 或者,假设您的USB设备在主机上的驱动程序可用等情况下可用,则可以使用特权模式和volumes选项将其安装在容器中。例如: 请注意,顾名思义,它是不安全的 ,应谨慎处理。

  • 我不明白如何从iOS设备向另一个iOS设备发送消息,我试图理解Firebase通知和Google云消息之间的区别。 null Google Cloud Messaging:它将消息从服务器发送到设备(下游)或设备发送到服务器(上游)!! 上游示例: 如果我需要从一个设备发送一个推送消息到另一个设备呢!这是否意味着在设备发送消息到服务器之后,我必须编程firebase服务器发送推送到客户端?真让人摸