Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule omówiono sposób określania i obsługi informacji o stanie połączenia dla urządzenia z profilem głośnomówiącym Bluetooth (HFP).
Sterownik audio musi obsługiwać KSPROPERTY_JACK_DESCRIPTION i utrzymywać pole IsConnected w kontekście fabryki filtrów. Sterownik używa tej wartości podczas obsługi właściwości KSPROPERTY_JACK_DESCRIPTION .
Po pomyślnym zakończeniu IOCTL_BTHHFP_DEVICE_GET_CONNECTION_STATUS_UPDATE sterownik dźwięku aktualizuje IsConnected z nowym stanem połączenia. Jeśli stan uległ zmianie, sterownik dźwięku zgłasza zdarzenie KSEVENT_PINCAPS_JACKINFOCHANGE, co powoduje ponowną ocenę stanu podłączenia przez system audio. Następnie sterownik audio wywołuje kolejne wystąpienie IOCTL_BTHHFP_DEVICE_GET_CONNECTION_STATUS_UPDATE, aby otrzymać kolejną zmianę stanu. Jeśli wcześniejsze żądanie zmiany stanu jest nadal oczekujące, to drugie wywołanie nie powiedzie się, a sterownik dźwięku nie aktualizuje stanu połączenia i nie wysyła kolejnego żądania o informacje dotyczące zmiany stanu.
Zgodnie z zagadnieniami dotyczącymi przesyłania strumieniowego jądra sterownik audio musi obsługiwać KSPROPERTY_ONESHOT_RECONNECT i KSPROPERTY_ONESHOT_DISCONNECT. Programy obsługi tych właściwości powinny odpowiednio wysyłać do sterownika HFP REQUESTCONNECT i REQUESTDISCONNECT IOCTLs. Te IOCTL są szybko wykonywane, a sterownik audio musi być gotowy do reagowania na zwrócone wyniki.
W tym artykule opisano również inne czynniki związane z połączeniem urządzenia audio Bluetooth, o których musi pamiętać deweloper sterowników dźwiękowych.
Kanał strumieniowy
Kanał strumieniowy reprezentuje przydział przepustowości bezprzewodowej przez sterownik dźwięku. W większości przypadków jest to kanał SCO. Jednak niektóre szczegóły zarządzania stanem kanału SCO są obsługiwane w całości w sterowniku HFP. Obejmuje to na przykład zdalne rozłączenia, które mogą być spowodowane scenariuszami połączeń, w których HF inicjuje transfer audio do bramy audio (z komputerem odgrywającym rolę bramy audio w tym przypadku).
Stany pinów filtru audio
Sterownik audio implementuje obsługę stanu pinów KS dla dwóch pinów KS. Kanał strumienia SCO jest wymagany dla któregokolwiek z tych pinów do przesyłania danych przez powietrze. Gdy którykolwiek z tych pinów przechodzi do stanu KSSTATE_ACQUIRE, sterownik audio otwiera kanał, wysyłając IOCTL_BTHHFP_STREAM_OPEN do sterownika HFP. Wykonanie tego wywołania asynchronicznego może potrwać kilka sekund. Sterownik audio nie musi implementować własnego mechanizmu przekroczenia limitu czasu i powinien poczekać na zakończenie operacji IOCTL przed ukończeniem przejścia do KSSTATE_ACQUIRE.
Gdy oba piny KS przechodzą do KSSTATE_STOP, sterownik dźwięku wysyła IOCTL_BTHHFP_STREAM_CLOSE do sterownika HFP, który zostaje szybko zakończony.
Aby określić, kiedy wysyłać IOCTL_BTHHFP_STREAM_OPEN i IOCTL_BTHHFP_STREAM_CLOSE, sterownik audio może użyć prostego mechanizmu do zliczania odwołań, aby śledzić liczbę pinów, które wymagają kanału strumienia SCO. Sterownik audio otworzy i zamknie kanał strumienia SCO, gdy liczba odwołań zmieni się z 0 na 1.
W IOCTL_BTHHFP_STREAM_OPEN sterownik HFP żąda kanału SCO, jeśli jeszcze nie jest on otwarty, i kończy żądanie wynikami z tego żądania SCO. W IOCTL_BTHHFP_STREAM_CLOSE sterownik HFP żąda rozłączenia kanału SCO, jeśli jest otwarty.
Zdalne nawiązywanie połączenia SCO i rozłączanie SCO
W przypadku zdalnego rozłączenia SCO sterownik HFP nie wykonuje żadnych działań, jeśli kanał strumienia jest zamknięty. Jeśli kanał strumienia jest otwarty, sterownik HFP uruchamia czasomierz ponownego połączenia. Po wygaśnięciu czasomierza, jeśli funkcja SCO jest nadal rozłączona, a kanał strumienia jest nadal otwarty, sterownik żąda kanału SCO. Należy pamiętać, że żadne dane audio nie są przesyłane drogą bezprzewodową, gdy SCO jest odłączony, dlatego w tym okresie będzie występować luka w dźwięku. Jeśli żądanie SCO zakończy się niepowodzeniem, sterownik HFP sygnalizuje zmianę stanu kanału strumienia na sterownik audio przez ukończenie dowolnego wywołania IOCTL_BTHHFP_STREAM_GET_STATUS_UPDATE. Powinno to być rzadkie, ponieważ zdalne zakończenie połączenia SCO jest zwykle skojarzone z urządzeniem HF żądającym transferu audio rozmowy do bramki audio. Sterownik dźwięku powinien rozważyć ten stan błędu w trakcie przetwarzania strumienia.
Ta procedura umożliwia aplikacji VoIP otrzymanie wywołania zwrotnego dotyczącego przesyłu audio z interfejsu API CallButtons i czyste zwolnienie zasobów audio na końcowym punkcie HFP, zamiast powodować błędy przesyłania strumieniowego.
Jeśli kanał strumienia jest otwarty w zdalnym połączeniu SCO, sterownik po prostu akceptuje połączenie. Jeśli kanał strumienia jest zamknięty, sterownik HFP akceptuje połączenie i uruchamia czasomierz rozłączenia. Gdy czasomierz rozłączenia wygaśnie, jeśli połączenie SCO jest nadal połączone, a kanał strumienia jest nadal zamknięty, sterownik przerywa połączenie SCO.
Ta procedura umożliwia aplikacji VoIP odbieranie callbacku transferu audio z interfejsu API CallButtons i tworzenie zasobów audio na punkcie końcowym HFP, bez przedwczesnego odrzucania lub zamykania połączenia SCO.