マイクロコントローラ デバイスで USB オーディオ入力ストリームを設定しようとしています。各 USB オーディオ ストリームには 2 つの代替設定があることを知っています。代替設定 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 がゼロに等しい最初の 2 つのインターフェイス記述子が使用されます。ただし、操作中に、ホストはインターフェイス 1 のインターフェイス 1 に向けられた SetInterface 要求を送信し、代替設定を 1 にして、他のインターフェイス記述子を有効にすることができます。」-一言で言えばUSB
改訂された質問: SetInterface リクエストを送信して、USB デバイスが入力ストリームを受け入れられるようにするにはどうすればよいですか?
新しい更新- 記述子を介して代替設定をアクティブに設定する方法はありますか? ストリーム記述子についてこれを読んでいました->「bmControlsフィールドには、存在するコントロールとその機能を示す一連のビットペアが含まれています。」「D1..0 アクティブな代替設定コントロール」、「D3..2 有効な代替設定コントロール」。
解決済みの並べ替え-
つまり、ホストデバイスでオーディオアプリを開いて代替設定を有効にする必要があったようです...そうであるとは知りませんでした。