Freigeben über


Überwachen der Hot Plug-Erkennung

Die Informationen auf dieser Seite gelten für Grafiktreiber, die mit einer früheren Version als WDDM 2.2 implementiert werden.

Eine Videoausgabe auf einem Displayadapter gilt als untergeordnetes Gerät der Grafikkarte. Ein Monitor oder ein anderes externes Anzeigegerät, das eine Verbindung mit der Ausgabe herstellt, wird nicht als untergeordnetes Gerät betrachtet. Während der Initialisierung weist die DxgkDdiQueryChildRelations-Funktion des Anzeigeminiporttreibers jedem untergeordneten Gerät einen Typ und einen HPD-Bewusstseinswert zu. Der Typ ist einer der DXGK_CHILD_DEVICE_TYPE Enumeratoren:

  • TypeVideoOutput

  • TypeOther

Der HPD-Bewusstseinswert ist einer der DXGK_CHILD_DEVICE_HPD_AWARENESS Enumeratoren:

  • HpdAwarenessAlwaysConnected

  • HpdAwarenessInterruptible

  • HpdAwarenessPolled

Ein untergeordnetes Gerät mit dem Typ TypeVideoOutput und einem anderen HPD-Bewusstseinswert als HpdAwarenessAlwaysConnected wird als Videoausgabeconnector bezeichnet.

Wenn der Anzeigeminiporttreiber nicht feststellen kann, ob ein Monitor mit der Videoausgabe verbunden ist, sollte der Treiber das Verhalten eines unterbrechbaren Geräts emulieren, wobei der HPD-Bewusstseinswert auf HpdAwarenessInterruptible festgelegt ist. Wenn der Anzeigeminiporttreiber angeben muss, dass ein unterbrechbarer Monitor an die Videoausgabe angeschlossen werden soll, z. B. wenn ein Benutzer eine Tastenkombination eingibt, um zu einer Fernsehansicht zu wechseln, sollte der Treiber die DxgkCbIndicateChildStatus-Funktion mit ChildStatus aufrufen. HotPlug. Verbundene Einstellung auf TRUE festgelegt.

Zu bestimmten Zeiten fordert das Betriebssystem an, dass der Display-Miniporttreiber die status aller Videoausgabeconnectors meldet, die den HPD-Bewusstseinswert HpdAwarenessPolled aufweisen. Es gibt kein regelmäßiges Abrufintervall; Die Anforderung wird vielmehr gestellt, wenn die Liste der verfügbaren Anzeigegeräte und -modi speziell aktualisiert werden muss. Wenn beispielsweise ein Laptop angedockt ist, muss das Betriebssystem wissen, ob ein Monitor an die Videoausgabe der Dockingstation angeschlossen ist. Das Betriebssystem stellt die Anforderung, indem es die DxgkDdiQueryChildStatus-Funktion des Anzeigeminiporttreibers für jedes untergeordnete Gerät aufruft, das den HPD-Bewusstseinswert HpdAwarenessPolled aufweist.

Bei Videoausgabeconnectors, die den HPD-Bewusstseinswert HpdAwarenessInterruptible haben, ist der Display-Miniporttreiber dafür verantwortlich, das Betriebssystem zu benachrichtigen, wenn ein externes Anzeigegerät heiß angeschlossen oder nicht angeschlossen ist. Der Interrupt-Verarbeitungscode des Anzeigeminiporttreibers ruft die DxgkCbIndicateChildStatus-Funktion des Anzeigeporttreibers auf, um zu melden, dass ein externes Anzeigegerät mit einer bestimmten Videoausgabe verbunden oder getrennt wurde. Wenn ein Laptop angedockt ist, muss die DxgkDdiNotifyAcpiEvent-Funktion des Anzeigeminiporttreibers DxgkCbIndicateChildStatus für jede Videoausgabe an der Dockingstation aufrufen, die den HPD-Bewusstseinswert HpdAwarenessInterruptible aufweist.

Wenn ein Connector mit dem HPD-Bewusstseinswert HpdAwarenessPolled beim Andocken eines Laptopcomputers nicht verfügbar (d. h. verdeckt) wird, muss die DxgkDdiNotifyAcpiEvent-Funktion des Anzeigeminiporttreibers DxgkCbIndicateChildStatus aufrufen, um zu melden, dass die Verbindung getrennt ist.

Die Videoausgabe, die einer integrierten Anzeige auf einem tragbaren Computer zugeordnet ist, ist ein ungewöhnlicher Fall. Das Betriebssystem muss wissen, ob der Deckel des tragbaren Computers offen oder geschlossen ist, daher wird die Idee von verbunden verwendet, um offen zu bedeuten, und die Idee von nicht verbunden wird verwendet, um geschlossen zu bedeuten. Die Videoausgabe, die einem integrierten Display auf einem tragbaren Computer zugeordnet ist, hat den HPD-Awareness-Wert HpdAwarenessInterruptible. Das bedeutet jedoch nicht, dass der Displayadapter beim Öffnen oder Schließen des Deckels einen Interrupt erzeugt. Vielmehr generiert das ACPI-BIOS einen Interrupt, wenn der Deckel geöffnet oder geschlossen wird. Dieser Interrupt führt zu einem Aufruf der DxgkDdiNotifyAcpiEvent-Funktion des Anzeigeminiporttreibers, die DxgkCbIndicateChildStatus aufruft, um die status (geöffnet oder geschlossen) des Deckels zu melden. Der Anzeigeminiporttreiber meldet die status des Deckels, indem er das HotPlug.Connected-Element einer DXGK_CHILD_STATUS-Struktur auf TRUE (open) oder FALSE (closed) festlegt und die DXGK_CHILD_STATUS-Struktur an DxgkCbIndicateChildStatus übergibt.

In der folgenden Liste werden die Schritte beschrieben, die ausgeführt werden, wenn ein Monitor mit einem HD15-Connector verbunden ist, vorausgesetzt, dass der Connector über den HPD-Bewusstseinswert HpdAwarenessPolled verfügt.

  1. Ein Monitor ist an den HD15-Anschluss des Grafikkartes angeschlossen. Der Grafikkarte erkennt dies nicht als Hot-Plug-Ereignis.

  2. Zu einem späteren Zeitpunkt fordert eine Benutzermodusanwendung eine Liste der Anzeigegeräte an.

  3. Für jeden Videoausgabeconnector auf dem Grafikkarten, der den HPD-Erkennungswert HpdAwarenessPolled aufweist, ruft der VidPN-Manager die DxgkDdiQueryChildStatus-Funktion des Anzeigeminiporttreibers auf, um zu bestimmen, ob ein externes Anzeigegerät verbunden ist. Wenn DxgkDdiQueryChildStatus für den HD15-Connector aufgerufen wird, wird gemeldet, dass tatsächlich ein externer Monitor verbunden ist.

In der folgenden Liste werden die Schritte beschrieben, die ausgeführt werden, wenn ein Monitor mit einem DVI-Connector verbunden ist, vorausgesetzt, dass der Connector den HPD-Awareness-Wert HpdAwarenessInterruptible aufweist.

  1. An den DVI-Anschluss des Displayadapters ist ein Flatpanel angeschlossen.

  2. Der Grafikkarte erkennt ein Hot-Plug-Ereignis und generiert einen Interrupt.

  3. Der Interrupt wird von der DxgkDdiInterruptRoutine-Funktion des Anzeigeminiporttreibers verarbeitet, die einen Verzögerten Prozeduraufruf (DPC) plant. Anschließend wird die DPC-Rückruffunktion des Anzeigeminiporttreibers aufgerufen.

  4. Die DPC-Rückruffunktion übergibt eine DXGK_CHILD_STATUS Struktur an die DxgkCbIndicateChildStatus-Funktion des Anzeigeporttreibers, um die status des DVI-Connectors zu melden. Das ChildUid-Element der DXGK_CHILD_STATUS-Struktur identifiziert den DVI-Anschluss, und der HotPlug.Connected-Member (in diesem Fall auf TRUE festgelegt) gibt an, dass ein externes Anzeigegerät verbunden ist.

Angenommen, ein DVI-Connector unterstützt einen Dongle mit drei Zweigen: DVI, HD15 und S-Video. In diesem Fall hat der Display-Miniporttreiber zuvor drei untergeordnete Geräte aufgelistet, die dem einen physischen DVI-Anschluss zugeordnet sind: DVI-on-DVI, HD15-on-DVI und S-video-on-DVI. Jedes dieser untergeordneten Geräte hätte den Typ TypeVideoOutput und den HPD-Sensibilisierungswert HpdAwarenessInterruptible. In der folgenden Liste werden die Schritte beschrieben, die ausgeführt werden, wenn ein Monitor mit dem HD15-Branch des Dongles verbunden ist.

  1. Der Grafikkarte erkennt ein Hot-Plug-Ereignis und generiert einen Interrupt.

  2. Der Interrupt wird von der DxgkDdiInterruptRoutine-Funktion des Anzeigeminiporttreibers verarbeitet, die einen Verzögerten Prozeduraufruf (DPC) plant. Anschließend wird die DPC-Rückruffunktion des Anzeigeminiporttreibers aufgerufen.

  3. Die DPC-Rückruffunktion bestimmt, dass sich das Hot-Plug-Ereignis auf dem HD15-Branch des Dongles (HD15-on-DVI) befand.

  4. Die DPC-Rückruffunktionen übergeben eine DXGK_CHILD_STATUS-Struktur an DxgkCbIndicateChildStatus, um die status der HD15-on-DVI-Videoausgabe zu melden. Das ChildUid-Element der DXGK_CHILD_STATUS-Struktur identifiziert die Videoausgabe, und der HotPlug.Connected-Member (in diesem Fall auf TRUE festgelegt) gibt an, dass ein externes Anzeigegerät verbunden ist.

In der folgenden Liste werden die Schritte beschrieben, die beim Schließen des Deckels auf einem Laptop ausgeführt werden.

  1. Der Deckel wird auf einem tragbaren Computer geschlossen, wodurch ein ACPI-Ereignis generiert wird. Anschließend wird die DxgkDdiNotifyAcpiEvent-Funktion des Anzeigeminiporttreibers aufgerufen.

  2. DxgkDdiNotifyAcpiEvent übergibt eine DXGK_CHILD_STATUS-Struktur an die DxgkCbIndicateChildStatus-Funktion des Anzeigeporttreibers, um die status des untergeordneten Geräts zu melden, das dem integrierten Anzeigebereich zugeordnet ist. Insbesondere legt DxgkDdiNotifyAcpiEvent das HotPlug.Connected-Element der DXGK_CHILD_STATUS-Struktur auf FALSE fest.