我一直在嘗試在我的單片機設備上設置USB音頻輸入流。我知道每個USB音頻流有兩個備用設置;備用設置0是沒有流可用的地方;備用設置1是有可用流的時候。啓用USB音頻類2.0音頻輸入流
我已經設置了USB音頻輸出,所以我知道流描述符工作正常。很明顯,當主機告訴它音頻通過時(微控制器啓用備用設置1 ...),微控制器會調用USB中斷來激活輸出。但是,現在我很困惑如何啓用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
謝謝!
EDIT - 只需讀這個源:
「啓用此配置中,使用具有bAlternativeSettings等於零前兩個接口描述符然而在操作期間,主機可以發送定向到一個SetInterface請求。的接口之一,其中一個替代設置爲啓用其他接口描述符。「 - USB in a Nutshell
修訂問題:如何發送SetInterface請求以使USB設備接受輸入流?
新更新 - 有沒有一種方法可以通過描述符設置備用設置激活?我正在閱讀關於流描述符的信息 - >「bmControls字段包含一組位對,表明哪些控件存在以及它們的功能是什麼。」 「D1..0有效交替設置控制」,「D3..2有效交替設置控制」。
解決的排序 -
所以它看起來像我剛打開一個音頻應用我的主機設備啓用備用設置上......我不知道是這種情況。
嗯以及我不使用的libusb所以這並不能真正幫助......但我並遵循那裏的意見和設置界面的Alt設置,一旦USB設備連接本身。但問題似乎更像是現在發送給主機的東西......主機(如Mac)是否應該隨時接受USB音頻數據?我知道主機將不會啓用USB音頻輸出,直到主機發送設置接口請求,聲明音頻數據正在傳輸到設備 –
在USB協議主機啓動任何通信。即使設備發送中斷,也必須等待主機輪詢它。所以如果有一個流然後主機請求它,所以它應該接受它。也許使用wireshark或http://unix.stackexchange.com/questions/138742/how-to-dump-usb-traffic來嗅探USB,看看會發生什麼 –
嗯,這證實了我一直在過去一天的一些懷疑。有沒有辦法通過描述符設置備用設置?我正在閱讀關於流描述符的信息 - >「bmControls字段包含一組位對,表明哪些控件存在以及它們的功能是什麼。」 「D1..0有效交替設置控制」,「D3..2有效交替設置控制」。可能我只需要設置這些? –