この記事では、Bluetoothハンズフリー プロファイル (HFP) バイパス オーディオ ストリーミングの動作と理論について説明します。
バイパス モードでは、Bluetoothオーディオ制御パスは、I2S などのホスト コントローラー インターフェイス (HCI) 以外のハードウェア接続を介して、Bluetooth コントローラーに流れます。 この他のハードウェア接続は多くの場合 I2S ですが、Bluetooth ホスト コントローラーによって決定される任意のインターフェイスを使用できます。 この接続は、"バイパス" または "サイドバンド" 接続と呼ばれます。
オーディオ I/O はバイパス接続を介して行われますが、ワイヤレス同期接続指向 (SCO) オーディオ ストリームは引き続き HCI を介して管理されます。 Windows 8 には、Bluetooth Hands-Free プロファイル (HFP) ドライバーが用意されており、SCO 接続やその他の Hands-Free プロファイルの管理を簡略化します。 ただし、カスタム オーディオ ドライバーは、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 つだけであると想定しています。 さらに、Hands-Free プロファイル (HFP) 同期接続指向 (SCO) バイパス のサポートでは、バイパス接続が 1 つしかないと想定されており、HFP デバイス ドライバー インターフェイスを介して開かれたチャネルは、その 1 つの接続に関連付けられています。
オーディオ ドライバーは、先着順で 1 つのコンシューマーに対して、このチャネルと単一バイパス接続を裁定する必要があります。 これを実現する最も簡単な方法は、ドライバーが 1 つのフィルターのみがそのピンを ACQUIRE 状態に遷移できるようにすることです。
こちらも参照ください
次のトピックでは、HFP デバイスとそのオーディオ ドライバーの接続ライフ サイクルといくつかの設計機能について詳しく説明します。