Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird der Prozess erläutert, wenn ein Bluetooth-Freisprechprofilgerät (HFP) im Audiosystem eintrifft.
Für jedes gekoppelte HFP-Gerät, das im Audiosystem eintrifft, registriert der Windows-HFP-Treiber eine Geräteschnittstelle in der GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS Klasse. Der Audiotreiber verwendet Geräteschnittstellenbenachrichtigungen, um über alle Instanzen der GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS Schnittstellen auf dem Laufenden zu bleiben. Der Audiotreiber ruft IoRegisterPlugPlayNotification aus seiner AVStrMiniDevicePostStart-Treiberroutine (oder von einer entsprechenden Portcls-Routine) auf, um einen Rückruf zu registrieren, um die aktuell installierten HFP-Geräte zu ermitteln und über neue HFP-Geräte benachrichtigt zu werden.
Wenn der Audiotreiber IoRegisterPlugPlayNotification aufruft, wird der Aufruf mit den folgenden Parametern ausgeführt:
- EventCategory ist auf EventCategoryDeviceInterfaceChange festgelegt.
- EventCategoryFlags wird typischerweise auf PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES festgelegt, um umgehend Benachrichtigungen über vorhandene Schnittstellen zu erhalten. Einige alternative Audiotreiberdesigns finden jedoch möglicherweise vorhandene Schnittstellen auf andere Wege.
- EventCategoryData ist auf GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS festgelegt.
- DriverObject ist auf das DriverObject des Audiotreibers gesetzt.
- CallbackRoutine ist auf eine Routine im Audiotreiber festgelegt, die die Benachrichtigungen empfängt.
In den folgenden Abschnitten werden die Aufgaben beschrieben, die der Audiotreiber für jede registrierte Instanz eines gekoppelten HFP-Geräts ausführen kann.
Verwaltung von Schnittstelleninstanzen
Für jede Schnittstelleninstanz, die in der GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS-Klasse registriert ist, muss der Audiotreiber das folgende Protokoll für die Kommunikation verwenden:
- Wenn Windows die Rückrufroutine des Audiotreibers aufruft, die registriert wurde, als der Audiotreiber IoRegisterPlugPlayNotification aufrief, übergibt Windows mithilfe von DEVICE_INTERFACE_CHANGE_NOTIFICATION eine symbolische Verknüpfung für die HFP-Schnittstelle. SymbolicLinkName.
- Wenn der Audiotreiber IoGetDeviceObjectPointer aufruft, verwendet der Treiber die symbolische Verknüpfung, um das HFP FileObject und das DeviceObject für das HFP-Gerät abzurufen.
- Wenn der Audiotreiber IOCTLs an den HFP-Treiber sendet, verwendet der Treiber das HFP FileObject und das DeviceObject für das HFP-Gerät.
Abrufen statischer Informationen
Der Audiotreiber kann statische Informationen vom HFP-Treiber abrufen. Beispielsweise kann der HFP-Treiber den ksnodetype, die Container-ID und den Anzeigenamen des gekoppelten HFP-Geräts bereitstellen. Der Audiotreiber kann diese Informationen verwenden, um einen KS-Filter oder Filter zu erstellen und zu initialisieren, der das gekoppelte HFP-Gerät darstellt. Der Audiotreiber verwendet IOCTL_BTHHFP_DEVICE_GET_DESCRIPTOR , um diese Informationen abzurufen.
Der Audiotreiber kann auch die Bluetooth-Adresse des gekoppelten HFP-Geräts abrufen. Jedes gekoppelte HFP-Gerät verfügt über eine eindeutige Bluetooth-Adresse, die als eindeutige Id-Zeichenfolge nützlich sein kann. Weitere Informationen finden Sie unter Abrufen der Bluetooth-Adresse des HF-Geräts.
Erstellen und Initialisieren eines audiospezifischen Filter-Factory-Kontexts
Zum Erstellen und Initialisieren eines audiospezifischen Filterfactorykontexts muss der Audiotreiber das HFP DeviceObject und das HFP FileObject im Filterfactorykontext speichern und dann das IsConnected-Feld auf "false" initialisieren.
Erstellen der KS Filter-Factory
Für jede Geräteinstanz in der GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS-Schnittstellenklasse erstellt und aktiviert der Audiotreiber einen oder mehrere Filterfabriken.
Wenn der Audiotreiber ein AVStream-Treiber ist, ruft der Audiotreiber KsCreateFilterFactory auf, um die neue Filterfactory hinzuzufügen, und KsFilterFactorySetDeviceClassesState, um die Factory zu aktivieren. Wenn der Audiotreiber ein PortCls-Treiber ist, erstellt er indirekt und aktiviert KS-Filterfabriken durch Aufrufen von PcRegisterSubdevice. Für viele PortCls-Audiotreiberdesigns sind zwei Untergeräte für ein bestimmtes gekoppeltes HFP-Gerät registriert.
Jede Filterfabrik (oder, für PortCls-Audiotreiber, jedes Paar von Filterfabriken) stellt die Audiofunktionalität eines einzelnen gepaarten HFP-Geräts dar. Der Audiotreiber erstellt separate Filterinstanzen für jedes gekoppelte HFP-Gerät, das durch eindeutige Instanzen von GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS Schnittstellen dargestellt wird. Für jedes gekoppelte HFP-Gerät muss der Audiotreiber eindeutige Zeichenfolgen für den RefString-Parameter von KsCreateFilterFactory oder den Name-Parameter von PcRegisterSubdevice verwenden. Der Treiberentwickler kann es hilfreich finden, die Bluetooth-Adresszeichenfolge des gekoppelten HFP-Geräts als eindeutige Zeichenfolge zu verwenden. Um Informationen zum Abrufen der eindeutigen Zeichenfolge zu erhalten, siehe Bluetooth-Adresse des HF-Geräts abrufen.
Beachten Sie, dass es keine bestimmte maximale Anzahl möglicher gekoppelter HFP-Geräte gibt, sodass der Audiotreiber das explizite Festlegen von Einschränkungen im Code vermeiden sollte. Stattdessen muss der Audiotreiber das dynamische Eintreffen und Entfernen mehrerer GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS Schnittstellen ordnungsgemäß verarbeiten.
In der Praxis muss ein PortCls-Treiber jedoch eine maximale Anzahl von Untergeräten angeben, wenn pcAddAdapterDevice aufgerufen wird. PcAddAdapterDevice weist vorab zusätzlichen Speicher für jedes potenzielle Untergerät zu. Der Entwickler des Audiotreibers sollte eine Zahl auswählen, die hoch genug ist, um viele gekoppelte Geräte aufzunehmen, aber gleichzeitig eine Zahl auswählen, die nicht zu einer Verschwendung von Ressourcen führt. Die Unterstützung von nur zwei HFP-Geräten kann beispielsweise unzureichend sein, und die Unterstützung von zweiTausenden würde sicherlich zu überlastenden Ressourcen führen. Die Unterstützung von Sechzehn ist jedoch wahrscheinlich sinnvoll.
Wenn der Audiotreiber zur Laufzeit über eine andere GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS Schnittstelle benachrichtigt wird, aber bereits seine maximale Anzahl von Untergeräten registriert hat, kann der Audiotreiber einen Algorithmus aufrufen, um ein gekoppeltes HFP-Gerät auszuwählen, dessen Untergeräte die Registrierung aufheben können, um Platz für das neue HFP-Gerät zu schaffen. Beispielsweise könnte der Audiotreiber das HFP-Gerät mit der ältesten Verbindung nachverfolgen. Während ein einfacherer, aber vielleicht weniger benutzerfreundlicher Audiotreiber zusätzliche GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS-Schnittstellen möglicherweise einfach ignorieren könnte, nachdem er sein Maximum erreicht hat.
Senden des Verbindungsstatus IOCTL
Der Audiotreiber sendet den IOCTL-Befehl zur Abfrage des Verbindungsstatus, um Informationen über jegliche Änderungen abzurufen, die in der Verbindung aufgetreten sind.
Senden des Befehls zum Abrufen des Volumenstatus IOCTL
Der Audiotreiber sendet das IOCTL zum Abrufen des Lautstärkestatus, um Informationen über Änderungen der Lautstärkestufe abzurufen, die im Lautstärkestatus des Headsets aufgetreten sind.