다음을 통해 공유


Bluetooth HFP 바이패스 오디오 스트리밍

이 문서에서는 오디오 스트리밍을 우회하는 Bluetooth HFP(핸즈프리 프로필)의 작업 및 이론을 설명합니다.

바이패스 모드에서 Bluetooth 오디오 제어 경로는 I2S와 같은 HCI(호스트 컨트롤러 인터페이스) 이외의 하드웨어 연결을 통해 Bluetooth 컨트롤러로 흐릅니다. 이 다른 하드웨어 연결은 종종 I2S이지만 Bluetooth 호스트 컨트롤러에 의해 결정되는 모든 인터페이스일 수 있습니다. 이 연결을 "바이패스" 또는 "사이드밴드" 연결이라고 합니다.

오디오 I/O는 바이패스 연결을 통해 발생하지만 SCO(무선 동기 연결 지향) 오디오 스트림은 여전히 HCI를 통해 관리됩니다. Windows 8 SCO 연결 및 Hands-Free 프로필의 기타 측면 관리를 간소화하기 위해 HFP(Bluetooth Hands-Free Profile) 드라이버를 제공합니다. 그러나 사용자 지정 오디오 드라이버는 Windows와 바이패스 연결 간의 오디오 데이터 I/O를 제어합니다.

HFP 드라이버와 오디오 I/O 데이터에 대한 사용자 지정 제어 드라이버에는 별도의 역할이 있으므로 이들 간의 효율적인 통신이 요구됩니다. 이 통신은 사용자 지정 오디오 드라이버에서 Windows HFP 드라이버로 전달되는 IOCTL 집합에 의해 처리됩니다.

일반적으로 바이패스 연결은 항상 존재합니다. PnP(플러그 앤 플레이) 서비스는 이 연결을 포함하는 하드웨어를 열거하고 필요한 오디오 드라이버를 로드합니다. 그러나 오디오 시스템에는 HFP 헤드셋이 페어링되어 있거나 없을 수 있으며, 바이패스 연결은 하나 이상의 HFP 헤드셋이 페어링된 경우에만 유용합니다.

쌍을 이루는 각 HFP 디바이스에 대해 Windows HFP 드라이버는 GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS 인터페이스 클래스에서 디바이스 인터페이스를 등록하고 사용하도록 설정합니다. HFP 디바이스에는 다음 조건이 적용됩니다.

  • Windows가 HFP 드라이버를 활성화하면(일반적으로 부팅하는 동안) HFP 드라이버가 각 쌍을 이루는 HFP 디바이스에 대해 인터페이스를 등록하고 사용하도록 설정합니다.
  • HFP 디바이스가 이미 실행 중인 Windows와 처음 페어링되면 HFP 드라이버가 디바이스에 대한 인터페이스를 등록하고 사용하도록 설정합니다.
  • 쌍을 이루는 HFP 디바이스가 없는 경우 Windows HFP 드라이버는 디바이스 인터페이스의 n 인스턴스를 등록합니다.
  • 쌍을 이루는 HFP 디바이스가 제거되면 Windows HFP 드라이버는 디바이스 인터페이스를 사용하지 않도록 설정합니다.
  • Windows에서 HFP 드라이버를 중지하면(일반적으로 종료 또는 다시 부팅하는 동안) HFP 드라이버는 쌍을 이루는 각 HFP 디바이스에 대해 인터페이스를 사용하지 않도록 설정합니다.
  • 오디오 드라이버는 시작 또는 종료 중뿐만 아니라 언제든지 인터페이스의 여러 도착 및 제거를 처리해야 합니다.

I2S 및 SCO 리소스 관리

이 섹션에서는 Bluetooth 바이패스 오디오 스트리밍 지원 설계에 대한 가정을 설명합니다.

현재 Windows는 Bluetooth 호스트 컨트롤러가 하나만 있다고 가정합니다. 또한 HFP(Hands-Free Profile) SCO(동기 연결 지향) 바이패스 지원은 바이패스 연결이 하나만 있다고 가정하고 HFP 디바이스 드라이버 인터페이스를 통해 열린 채널은 해당 단일 연결과 연결됩니다.

오디오 드라이버는 선착순으로 단일 소비자에 대해 이 채널과 단일 바이패스 연결을 중재해야 합니다. 이를 달성하는 가장 간단한 방법은 드라이버가 단일 필터만 핀을 ACQUIRE 상태로 전환하도록 허용하는 것입니다.

추가 정보

다음 topics 연결 수명 주기 및 HFP 디바이스 및 해당 오디오 드라이버의 일부 디자인 기능에 대한 자세한 정보를 제공합니다.