Freigeben über


Dynamische Untergeräteregistrierung und -deregistrierung

Geräte, die eine Form der Jack-Anwesenheitserkennung unterstützen, werden als dynamische Geräte bezeichnet, und ihre Buchsen müssen die KSPROPERTY_JACK_DESCRIPTION-Eigenschaft unterstützen. Die folgenden Schritte zeigen den Algorithmus, der vom Treiber eines dynamischen Geräts zum Erstellen, Registrieren oder Aufheben der Registrierung der zugeordneten Untergeräte für diese dynamischen Geräte verwendet wird. Die Untergeräte werden in Form von Filtern erstellt.

Die folgenden Schritte zeigen, was geschieht, wenn ein Audiogerät an die Buchse angeschlossen ist, wenn der Audiogerätetreiber geladen wird:

  1. Der Treiber verwendet die Erkennung der Buchse, um zu bestimmen, dass ein Gerät an die Buchse angeschlossen ist. Der Treiber ruft PcRegisterSubdevice auf, um einen Topologiefilter bei Portcls zu registrieren. Eine KSCATEGORY_AUDIO-Schnittstelle wird als Ergebnis der Topologiefilterregistrierung erstellt.

  2. Der Audiostapel wird benachrichtigt, wenn die KSCATEGORY_AUDIO-Schnittstelle erstellt wird, und der AudioEndpoint-Generator erstellt und initialisiert einen zugeordneten Endpunkt und legt seinen Zustand dann auf aktiv fest.

  3. Der Treiber registriert einen Wellenfilter bei Portcls, und der Audiostapel wird benachrichtigt.

  4. Der Treiber ruft PcRegisterPhysicalConnection auf, um den Wellenfilter mit dem Topologiefilter zu verbinden. Diese physische Verbindung wird dann bei Portcls registriert.

  5. Der Treiber legt das IsConnected-Element der KSJACK_DESCRIPTION-Struktur auf TRUE fest, um anzugeben, dass ein Gerät an die Buchse angeschlossen ist.

Hinweis Wenn dem Audiogerät keine Erkennung der Jack-Anwesenheit vorhanden ist, muss der IsConnected-Member immer TRUE sein. Um zu überprüfen, ob das Gerät die Jack-Anwesenheitserkennung unterstützt, kann eine Clientanwendung IKsJackDescription2::GetJackDescription2 aufrufen, um das JackCapabilities-Flag der KSJACK_DESCRIPTION2-Struktur zu lesen. Wenn für dieses Flag das JACKDESC2_PRESENCE_DETECT_CAPABILITY Bit festgelegt ist, gibt dies an, dass der Endpunkt die Erkennung von Jack Presence unterstützt. In diesem Fall kann der Rückgabewert des IsConnected-Members als genaue Spiegelung des Einfüge-status der Buchse interpretiert werden.

In den folgenden Schritten wird erläutert, was geschieht, wenn beim Laden des Treibers kein Audiogerät an die Buchse angeschlossen ist:

  1. Der Treiber verwendet die Erkennung der Jack-Anwesenheit, um festzustellen, dass kein Gerät an die Buchse angeschlossen ist. Es registriert jedoch einen Topologiefilter mit Portcls für die Buchse, und es wird eine KSCATEGORY_AUDIO-Schnittstelle erstellt.

  2. Der Audiostapel wird benachrichtigt, wenn die KSCATEGORY_AUDIO-Schnittstelle erstellt wird. AudioEndpointBuilder fragt den Miniporttreiber ab, um anhand der KSJACK_DESCRIPTION-Eigenschaft zu bestimmen, ob der Zustand des Endpunkts als nicht angeschlossen festgelegt werden soll.

  3. Der Treiber legt den IsConnected-Member der KSJACK_DESCRIPTION-Struktur auf FALSE fest, um anzugeben, dass kein Gerät an die Buchse angeschlossen ist.

Weitere Informationen zu den verschiedenen Zuständen eines Audioendpunkts finden Sie unter Audioendpunkt-Generatoralgorithmus.

Um die vorherige Beschreibung der Registrierungs- und Deregistrierungsprozesse des Untergerätes zu erfüllen, müssen Gerätetreiber, die die Erkennung der Jack-Anwesenheit unterstützen, auf die folgende Weise reagieren, auf das Einfügen und Entfernen des Steckers:

Reaktion des Gerätetreibers auf ein Einfügen eines Steckers

  1. Der Treiber muss PcRegisterSubdevice aufrufen, um einen Wellenfilter bei Portcls zu registrieren. Hinweis Der Treiber hat bereits PcRegisterSubdevice im Topologiefilter aufgerufen, als der Treiber geladen wurde, ohne dass das Gerät an die Buchse angeschlossen war.

  2. Der Treiber muss PcRegisterPhysicalConnection aufrufen, um die Verbindung "Welle zum Topologiefilter" bei Portcls zu registrieren.

  3. Der Treiber muss das IsConnected-Element der KSJACK_DESCRIPTION-Struktur auf TRUE festlegen.

Reaktion des Gerätetreibers auf das Entfernen eines Steckers

  1. Der Treiber muss IUnregisterPhysicalConnection::UnregisterPhysicalConnection aufrufen, um die Registrierung der physischen Verbindung zwischen dem Wellenfilter und dem Topologiefilter aufzuheben.

  2. Der Treiber muss IUnregisterSubdevice::UnregisterSubdevice aufrufen, um die Registrierung des Wellenfilters aufzuheben.

  3. Der Treiber muss das IsConnected-Element der KSJACK_DESCRIPTION Struktur FALSE festlegen.