USB Speakerに続いて、USB Mic機能を追加しました。Config Descriptorには、マイク部分を追加すればいいわけで、それも構成としてはSpeakerと同じ要領で作成すればいいだけなのですが、それでもDescriptorの長さの計算を間違えて何度かBlue screenを見ることとなってしました。
Speaker/Micを構成するTerminal IDとUnit IDは次のように割り当てました。
Speaker/Micは、それぞれInput Terminal, Feature Unit, Output Terminalの3つの部分がつながって構成されています。Feature Unitは、ボリュームのように制御をおこなう機能部分です。Speakerの場合には、USBポートで受けた音声データを物理的なスピーカに出力することになるので、Input TerminalがUSB Stream, Output TerminalがSpeakerとなります。3つの部分のつながり方の順番はSource IDによって表現されています。
インターフェースについては、全部で3つあり、次のような構成となっています。
0番がFeature Unitを制御するためのインタフェース、1番がスピーカ、2番がマイクに対応するインタフェースとして定義しています。Alternate settingは、0番がバンド幅0のインタフェースとなっており、デバイスを非活性化する際に使用されます。この使われ方については、次回記事で示す動作ログを見るとわかりやすいと思います。
Speaker/Micを構成するTerminal IDとUnit IDは次のように割り当てました。
ID | Descriptor Type | Terminal Type | Source ID | |
---|---|---|---|---|
Speaker | 1 | Input Terminal | USB streaming | N/A |
2 | Feature Unit | N/A | 1 | |
3 | Output Terminal | Speaker | 2 | |
Mic | 4 | Input Terminal | Microphone | N/A |
5 | Feature Unit | N/A | 4 | |
6 | Output Terminal | USB streaming | 5 |
Speaker/Micは、それぞれInput Terminal, Feature Unit, Output Terminalの3つの部分がつながって構成されています。Feature Unitは、ボリュームのように制御をおこなう機能部分です。Speakerの場合には、USBポートで受けた音声データを物理的なスピーカに出力することになるので、Input TerminalがUSB Stream, Output TerminalがSpeakerとなります。3つの部分のつながり方の順番はSource IDによって表現されています。
インターフェースについては、全部で3つあり、次のような構成となっています。
Interface Number | SubClass | Alternate setting |
---|---|---|
0 | Audio Control | N/A |
1 | Audio Streaming | 0 |
Audio Streaming | 1 | |
2 | Audio Streaming | 0 |
Audio Streaming | 1 |
0番がFeature Unitを制御するためのインタフェース、1番がスピーカ、2番がマイクに対応するインタフェースとして定義しています。Alternate settingは、0番がバンド幅0のインタフェースとなっており、デバイスを非活性化する際に使用されます。この使われ方については、次回記事で示す動作ログを見るとわかりやすいと思います。