Bluetooth HFPバイパスオーディオストリーミング
この記事では、Bluetooth ハンズフリー プロファイル (HFP) バイパス オーディオ ストリーミングの動作と理論について説明します。
バイパス モードでは、Bluetooth オーディオ制御パスは、I2S などのホスト コントローラー インターフェイス (HCI) 以外のハードウェア接続を経由して Bluetooth コントローラーに流れます。 この他のハードウェア接続は I2S であることが多いですが、Bluetooth ホスト コントローラーによって決定される任意のインターフェイスにすることができます。 この接続は、「バイパス」または「サイドバンド」接続と呼ばれます。
オーディオ I/O はバイパス接続を通じて発生しますが、無線同期接続指向 (SCO) オーディオ ストリームは引き続き HCI を通じて管理されます。 Windows 8 は、SCO 接続およびハンズフリー プロファイルのその他の側面の管理を簡素化する Bluetooth ハンズフリー プロファイル (HFP) ドライバーを提供します。 ただし、カスタム オーディオ ドライバーは、Windows とバイパス接続の間のオーディオ データ I/O を制御します。
HFP ドライバーとオーディオ I/O データのカスタム コントロール ドライバーは別々の役割を持っており、これらのドライバー間で効率的な通信を行う必要があります。 この通信は、カスタム オーディオ ドライバーから Windows HFP ドライバーに渡される一連の IOCTL によって処理されます。
通常、バイパス接続は常に存在します。 プラグ アンド プレイ (PnP) サービスは、この接続を含むハードウェアを列挙し、必要なオーディオ ドライバーを読み込みます。 ただし、オーディオ システムには HFP ヘッドセットがペアリングされている場合とそうでない場合があり、バイパス接続は少なくとも 1 つの HFP ヘッドセットがペアリングされている場合にのみ役立ちます。
ペアリングされた HFP デバイスごとに、Windows HFP ドライバーは GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS インターフェイス クラスにデバイス インターフェイスを登録して有効にします。 HFP デバイスには次の条件が適用されます。
- Windows が HFP ドライバーをアクティブ化すると (通常は起動中)、HFP ドライバーはペアリングされた各 HFP デバイスのインターフェイスを登録して有効にします。
- HFP デバイスが既に実行中の Windows と最初にペアリングされると、HFP ドライバーはデバイスのインターフェイスを登録して有効にします。
- ペアリングされた HFP デバイスが n 個ある場合、Windows HFP ドライバーはデバイス インターフェイスの n 個のインスタンスを登録します。
- ペアリングされた HFP デバイスが削除されると、Windows HFP ドライバーはデバイス インターフェイスを無効にします。
- Windows が HFP ドライバーを停止すると (通常はシャットダウンまたは再起動中)、HFP ドライバーはペアになっている各 HFP デバイスのインターフェイスを無効にします。
- オーディオ ドライバーは、起動時やシャットダウン時だけでなく、いつでもインターフェイスの複数の到着と削除を処理する必要があります。
I2S および SCO リソースの管理
このセクションでは、Bluetooth バイパス オーディオ ストリーミング サポートの設計における前提条件について説明します。
現在、Windows は Bluetooth ホスト コントローラーが 1 つだけであると想定しています。 さらに、ハンズフリー プロファイル (HFP) 同期接続指向 (SCO) バイパス サポートは、バイパス接続が 1 つだけ存在し、HFP デバイス ドライバー インターフェイスを通じて開かれたチャンネルがその 1 つの接続に関連付けられていることを前提としています。
オーディオ ドライバーは、このチャンネルと 1 人のコンシューマの 1 つのバイパス接続を先着順で調停する必要があります。 これを実現する最も簡単な方法は、ドライバーが 1 つのフィルターのみにそのピンを ACQUIRE 状態に遷移させることです。
関連項目
次のトピックでは、接続ライフ サイクルと、HFP デバイスとそのオーディオ ドライバーのいくつかの設計機能について詳しく説明します。