我一直在尝试在我的微控制器设备上设置 USB 音频输入流。我知道每个 USB 音频流都有两个备用设置;备用设置 0 是没有流可用的地方;备用设置 1 是当有可用的流时。
我已经设置了 USB 音频输出,所以我知道流描述符工作正常。显然,当主机告诉它何时有音频通过时,微控制器会调用 USB 中断来激活输出(告诉微控制器启用备用设置 1...)。但是,现在我很困惑如何启用 USB 音频输入端。我很困惑,因为显然主机没有告诉微控制器输入正在通过......而是设备告诉主机它正在发送数据。
如果有人可以让我了解如何正确启用输入流,那就太好了。我想知道我是否应该硬启用端点并以这种方式发送数据?如果需要,我可以提供更多代码,但我想这更像是一种思考类型/算法的问题方法。
这是我对流的备用设置的描述:
.iface_alt0.bLength = sizeof(usb_iface_desc_t)
.iface_alt0.bDescriptorType = USB_DT_INTERFACE
.iface_alt0.bInterfaceNumber = UDI_AUDIO_IFACE_DATA_IN_NUMBER
.iface_alt0.bAlternateSetting = 0
.iface_alt0.bNumEndpoints = 0
.iface_alt0.bInterfaceClass = AUDIO_IFACE_CLASS
.iface_alt0.bInterfaceSubClass = AUDIO_IFACE_SUBCLASS_STREAMING
.iface_alt0.bInterfaceProtocol = AUDIO_IFACE_IP_VERSION_02_00
.iface_alt0.iInterface = 0
.iface_alt1.bLength = sizeof(usb_iface_desc_t)
.iface_alt1.bDescriptorType = USB_DT_INTERFACE
.iface_alt1.bInterfaceNumber = UDI_AUDIO_IFACE_DATA_IN_NUMBER
.iface_alt1.bAlternateSetting = 1
.iface_alt1.bNumEndpoints = UDI_AUDIO_IN_NB_ENDPOINTS
.iface_alt1.bInterfaceClass = AUDIO_IFACE_CLASS
.iface_alt1.bInterfaceSubClass = AUDIO_IFACE_SUBCLASS_STREAMING
.iface_alt1.bInterfaceProtocol = AUDIO_IFACE_IP_VERSION_02_00
.iface_alt1.iInterface = 0
谢谢!
编辑- 只需阅读此来源:
“启用此配置后,将使用 bAlternativeSettings 等于 0 的前两个接口描述符。但是,在操作期间,主机可以发送一个 SetInterface 请求,该请求定向到接口一的请求,其中一个替代设置为启用另一个接口描述符。” -简而言之 USB
修订后的问题:如何发送 SetInterface 请求以使 USB 设备接受输入流?
新更新- 有没有办法可以通过描述符设置备用设置?我正在阅读有关流描述符的文章->“bmControls 字段包含一组位对,指示存在哪些控件以及它们的功能。” “D1..0 有效备用设置控制”、“D3..2 有效备用设置控制”。
解决了-
所以看起来我只需要在我的主机设备上打开一个音频应用程序来启用备用设置......我不知道是这种情况。