Condividi tramite


Monitorare il rilevamento dell'hot plug

Le informazioni contenute in questa pagina si applicano ai driver grafici implementati usando una versione precedente a WDDM versione 2.2.

Un'uscita video su un adattatore di visualizzazione è considerata un dispositivo figlio dell'adattatore di visualizzazione. Un monitor o un altro dispositivo di visualizzazione esterno che si connette all'output non è considerato un dispositivo figlio. Durante l'inizializzazione, la funzione DxgkDdiQueryChildRelations del driver miniport di visualizzazione assegna a ogni dispositivo figlio un tipo e un valore di rilevamento HPD. Il tipo è uno degli enumeratori DXGK_CHILD_DEVICE_TYPE :

  • TypeVideoOutput

  • TypeOther

Il valore di riconoscimento HPD è uno degli enumeratori DXGK_CHILD_DEVICE_HPD_AWARENESS :

  • HpdAwarenessAlwaysConnected

  • HpdAwarenessInterruptible

  • HpdAwarenessPolled

Un dispositivo figlio con tipo TypeVideoOutput e qualsiasi valore di consapevolezza HPD diverso da HpdAwarenessAlwaysConnected è chiamato connettore di output video.

Se il driver miniport di visualizzazione non è in grado di determinare se un monitor è connesso all'uscita video, dovrebbe emulare il comportamento di un dispositivo che può essere interrotto, impostando il valore di consapevolezza HPD su HpdAwarenessInterruptible. Se il driver del miniport di visualizzazione deve indicare che un monitor interrompibile deve essere connesso all'output video, ad esempio quando un utente immette un tasto di scelta rapida per passare a una visualizzazione televisiva, il driver deve chiamare la funzione DxgkCbIndicateChildStatus con ChildStatus. HotPlug. Connessione impostata su TRUE.

In alcuni casi, il sistema operativo richiede che il driver miniport del display segnali lo stato di tutti i connettori di output video con un valore di consapevolezza HPD di HpdAwarenessPolled. Non esiste alcun intervallo di polling regolare; invece, la richiesta viene effettuata quando è necessario aggiornare l'elenco dei dispositivi e delle modalità di visualizzazione disponibili. Ad esempio, quando un computer portatile è ancorato, il sistema operativo deve sapere se un monitor è connesso all'output video nella stazione di ancoraggio. Il sistema operativo effettua la richiesta chiamando la funzione DxgkDdiQueryChildStatus del driver miniport di visualizzazione per ogni dispositivo figlio con un valore di riconoscimento HPD di HpdAwarenessPolled.

Per i connettori di output video con un valore di riconoscimento HPD hpdAwarenessInterruptible, il driver miniport di visualizzazione è responsabile della notifica al sistema operativo ogni volta che un dispositivo di visualizzazione esterno è collegato o scollegato. Il codice di gestione degli interrupt del driver miniport di visualizzazione chiama la funzione DxgkCbIndicateChildStatus del driver della porta di visualizzazione per segnalare che un dispositivo di visualizzazione esterno è stato connesso o disconnesso da un output video specifico. Quando un computer portatile è ancorato, la funzione DxgkDdiNotifyAcpiEvent del driver miniport deve chiamare DxgkCbIndicateChildStatus per ogni output video nella stazione di ancoraggio con un valore hpdAwarenessInterruptible.

Se un connettore con un valore di riconoscimento HPD di HpdAwarenessPolled viene reso non disponibile (ovvero coperto) quando un computer portatile è ancorato, la funzione DxgkDdiNotifyAcpiEvent del driver miniport deve chiamare DxgkCbIndicateChildStatus per segnalare che il connettore è disconnesso.

L'output video associato a un pannello di visualizzazione integrato in un computer portatile è un caso insolito. Il sistema operativo deve sapere se il coperchio del computer portatile è aperto o chiuso, quindi l'idea di connessione viene usata per significare aperto e l'idea di non essere connesso viene utilizzato per significare chiuso. L'uscita video associata a uno schermo integrato in un computer portatile ha un valore di consapevolezza HPD di HpdAwarenessInterruptible. Ciò non significa, tuttavia, che l'adattatore di visualizzazione genera un interrupt quando il coperchio viene aperto o chiuso. Il BIOS ACPI genera invece un interrupt quando il coperchio viene aperto o chiuso. Questo interrupt genera una chiamata alla funzione DxgkDdiNotifyAcpiEvent del driver miniport di visualizzazione, che chiama DxgkCbIndicateChildStatus per segnalare lo stato (aperto o chiuso) del coperchio. Il driver miniport di visualizzazione segnala lo stato del coperchio impostando il membro HotPlug.Connected di una struttura DXGK_CHILD_STATUS su TRUE (aperto) o FALSE (chiuso) e passando la struttura DXGK_CHILD_STATUS a DxgkCbIndicateChildStatus.

L'elenco seguente descrive i passaggi seguiti quando un monitor è connesso a un connettore HD15, presupponendo che il connettore abbia un valore di consapevolezza HPD pari a HpdAwarenessPolled.

  1. Un monitor è connesso al connettore HD15 sulla scheda di visualizzazione. La scheda di visualizzazione non rileva questa situazione come evento hot-plug.

  2. In un secondo momento, un'applicazione in modalità utente richiede un elenco di dispositivi visualizzati.

  3. Per ogni connettore di output video sulla scheda di visualizzazione con un valore di riconoscimento HPD di HpdAwarenessPolled, il manager VidPN chiama la funzione DxgkDdiQueryChildStatus del driver miniport di visualizzazione per determinare se un dispositivo di visualizzazione esterno è connesso. Quando DxgkDdiQueryChildStatus viene chiamato per il connettore HD15, segnala che un monitor esterno è effettivamente connesso.

L'elenco seguente descrive i passaggi seguiti quando un monitor è connesso a un connettore DVI, assumendo che il connettore abbia un valore di consapevolezza HPD di HpdAwarenessInterruptible.

  1. Un pannello piatto è connesso al connettore DVI sulla scheda di visualizzazione.

  2. L'adattatore di visualizzazione rileva un evento hot-plug e genera un interrupt.

  3. L'interrupt viene gestito dalla funzione DxgkDdiInterruptRoutine del driver miniport di visualizzazione, che pianifica una chiamata di procedura posticipata (DPC). Successivamente viene chiamata la funzione di callback DPC del driver miniport di visualizzazione.

  4. La funzione di callback DPC passa una struttura DXGK_CHILD_STATUS alla funzione DxgkCbIndicateChildStatus del driver di porta di visualizzazione per segnalare lo stato del connettore DVI. Il membro ChildUid della struttura DXGK_CHILD_STATUS identifica il connettore DVI e il membro HotPlug.Connected (impostato su TRUE in questo caso) indica che un dispositivo di visualizzazione esterno è connesso.

Si supponga che un connettore DVI supporti un dongle con tre rami: DVI, HD15 e S-video. In tal caso, il driver miniport di visualizzazione avrebbe enumerato in precedenza tre dispositivi figli associati a un connettore DVI fisico: DVI-on-DVI, HD15-on-DVI e S-video-on-DVI. Ognuno di questi dispositivi figlio sarebbe del tipo TypeVideoOutput e avrebbe un valore di consapevolezza HPD di HpdAwarenessInterruptible. L'elenco seguente descrive i passaggi seguiti quando un monitoraggio è connesso al ramo HD15 del dongle.

  1. L'adattatore di visualizzazione rileva un evento hot-plug e genera un interrupt.

  2. L'interrupt viene gestito dalla funzione DxgkDdiInterruptRoutine del driver miniport di visualizzazione, che pianifica una chiamata di procedura posticipata (DPC). Successivamente viene chiamata la funzione di callback DPC del miniport driver di visualizzazione.

  3. La funzione di callback DPC determina che l'evento hot-plug è avvenuto nel ramo HD15 del dongle (HD15-on-DVI).

  4. La funzione di callback DPC passa una struttura DXGK_CHILD_STATUS a DxgkCbIndicateChildStatus per segnalare lo stato dell'output video HD15-on-DVI. Il membro ChildUid della struttura DXGK_CHILD_STATUS identifica l'output video e il membro HotPlug.Connected (impostato su TRUE in questo caso) indica che un dispositivo di visualizzazione esterno è connesso.

L'elenco seguente descrive i passaggi seguiti quando il coperchio viene chiuso su un computer portatile.

  1. Il coperchio viene chiuso in un computer portatile, che genera un evento ACPI. Successivamente, viene chiamata la funzione DxgkDdiNotifyAcpiEvent del driver miniport.

  2. DxgkDdiNotifyAcpiEvent passa una struttura DXGK_CHILD_STATUS alla funzione DxgkCbIndicateChildStatus del driver della porta di visualizzazione per segnalare lo stato del dispositivo figlio associato al pannello di visualizzazione predefinito. In particolare, DxgkDdiNotifyAcpiEvent imposta il membro HotPlug.Connected della struttura DXGK_CHILD_STATUS su FALSE.