Surveiller la détection des hot plug
Les informations de cette page s’appliquent aux pilotes graphiques implémentés à l’aide d’une version antérieure à WDDM version 2.2.
Une sortie vidéo sur un adaptateur d’affichage est considérée comme un périphérique enfant de la carte graphique. Un moniteur ou un autre périphérique d’affichage externe qui se connecte à la sortie n’est pas considéré comme un appareil enfant. Pendant l’initialisation, la fonction DxgkDdiQueryChildRelations du pilote miniport d’affichage attribue à chaque appareil enfant un type et une valeur de reconnaissance HPD. Le type est l’un des énumérateurs DXGK_CHILD_DEVICE_TYPE :
TypeVideoOutput
TypeOther
La valeur hpd awareness est l’un des énumérateurs les DXGK_CHILD_DEVICE_HPD_AWARENESS :
HpdAwarenessAlwaysConnected
HpdAwarenessInterruptible
HpdAwarenessPolled
Un appareil enfant qui a un type TypeVideoOutput et toute valeur de reconnaissance HPD autre que HpdAwarenessAlwaysConnected est appelé connecteur de sortie vidéo.
Si le pilote de miniport d’affichage ne peut pas déterminer si un moniteur est connecté à la sortie vidéo, le pilote doit émuler le comportement d’un périphérique interruptible, avec la valeur hpdAwarenessInterruptible pour la reconnaissance HPD. Si le pilote miniport d’affichage doit indiquer qu’un moniteur interruptible doit être connecté à la sortie vidéo, par exemple lorsqu’un utilisateur entre dans un raccourci clavier pour passer à une vue de télévision, le pilote doit appeler la fonction DxgkCbIndicateChildStatus avec ChildStatus. HotPlug. Connecté défini sur TRUE.
À certains moments, le système d’exploitation demande que le pilote de miniport d’affichage signale la status de tous les connecteurs de sortie vidéo qui ont une valeur hpD de hpdAwarenessPolled. Il n’y a pas d’intervalle d’interrogation régulier ; au lieu de cela, la demande est effectuée lorsqu’il existe un besoin spécifique de mettre à jour la liste des périphériques d’affichage et des modes disponibles. Par exemple, lorsqu’un ordinateur portable est ancré, le système d’exploitation doit savoir si un moniteur est connecté à la sortie vidéo sur la station d’accueil. Le système d’exploitation effectue la demande en appelant la fonction DxgkDdiQueryChildStatus du pilote miniport d’affichage pour chaque appareil enfant qui a une valeur hpdAwarenessPolled de reconnaissance HPD.
Pour les connecteurs de sortie vidéo qui ont une valeur de reconnaissance HPD de HpdAwarenessInterruptible, le pilote miniport d’affichage est chargé de notifier le système d’exploitation chaque fois qu’un périphérique d’affichage externe est branché à chaud ou débranché. Le code de gestion des interruptions du pilote de miniport d’affichage appelle la fonction DxgkCbIndicateChildStatus du pilote de port d’affichage pour signaler qu’un périphérique d’affichage externe a été connecté à une sortie vidéo particulière ou s’est déconnecté de celui-ci. Lorsqu’un ordinateur portable est ancré, la fonction DxgkDdiNotifyAcpiEvent du pilote miniport d’affichage doit appeler DxgkCbIndicateChildStatus pour chaque sortie vidéo sur la station d’accueil qui a une valeur de reconnaissance HPD de HpdAwarenessInterruptible.
Si un connecteur avec une valeur de reconnaissance HPD de HpdAwarenessPolled est rendu indisponible (autrement dit, couvert) lorsqu’un ordinateur portable est ancré, la fonction DxgkDdiNotifyAcpiEvent du pilote miniport d’affichage doit appeler DxgkCbIndicateChildStatus pour signaler que le connecteur est déconnecté.
La sortie vidéo associée à un panneau d’affichage intégré sur un ordinateur portable est un cas inhabituel. Le système d’exploitation doit savoir si le couvercle de l’ordinateur portable est ouvert ou fermé, de sorte que l’idée de connecté est utilisée pour signifier ouvert et l’idée de non connecté est utilisée pour signifier fermé. La sortie vidéo associée à un affichage intégré sur un ordinateur portable a une valeur de reconnaissance HPD de HpdAwarenessInterruptible. Cela ne signifie pas, toutefois, que l’adaptateur d’affichage génère une interruption lorsque le couvercle est ouvert ou fermé. Au lieu de cela, le BIOS ACPI génère une interruption lorsque le couvercle est ouvert ou fermé. Cette interruption entraîne un appel à la fonction DxgkDdiNotifyAcpiEvent du pilote miniport d’affichage, qui appelle DxgkCbIndicateChildStatus pour signaler la status (ouverte ou fermée) du couvercle. Le pilote de miniport d’affichage signale la status du couvercle en définissant le membre HotPlug.Connected d’une structure DXGK_CHILD_STATUS sur TRUE (ouvert) ou FALSE (fermé) et en passant la structure DXGK_CHILD_STATUS à DxgkCbIndicateChildStatus.
La liste suivante décrit les étapes suivies lorsqu’un moniteur est connecté à un connecteur HD15, en supposant que le connecteur a une valeur de reconnaissance HPD de HpdAwarenessPolled.
Un moniteur est connecté au connecteur HD15 sur l’adaptateur d’affichage. L’adaptateur graphique ne détecte pas cela comme un événement de plug-in à chaud.
À un moment ultérieur, une application en mode utilisateur demande une liste d’appareils d’affichage.
Pour chaque connecteur de sortie vidéo sur l’adaptateur d’affichage qui a une valeur de reconnaissance HPD de HpdAwarenessPolled, le gestionnaire VidPN appelle la fonction DxgkDdiQueryChildStatus du pilote miniport d’affichage pour déterminer si un périphérique d’affichage externe est connecté. Lorsque DxgkDdiQueryChildStatus est appelé pour le connecteur HD15, il signale qu’un moniteur externe est effectivement connecté.
La liste suivante décrit les étapes suivies lorsqu’un moniteur est connecté à un connecteur DVI, en supposant que le connecteur a une valeur de reconnaissance HPD de HpdAwarenessInterruptible.
Un panneau plat est connecté au connecteur DVI sur l’adaptateur d’affichage.
L’adaptateur graphique détecte un événement hot-plug et génère une interruption.
L’interruption est gérée par la fonction DxgkDdiInterruptRoutine du pilote miniport d’affichage, qui planifie un appel de procédure différée (DPC). Par la suite, la fonction de rappel DPC du pilote miniport d’affichage est appelée.
La fonction de rappel DPC transmet une structure DXGK_CHILD_STATUS à la fonction DxgkCbIndicateChildStatus du pilote de port d’affichage pour signaler la status du connecteur DVI. Le membre ChildUid de la structure DXGK_CHILD_STATUS identifie le connecteur DVI, et le membre HotPlug.Connected (défini sur TRUE dans ce cas) indique qu’un périphérique d’affichage externe est connecté.
Supposons qu’un connecteur DVI prenne en charge un dongle qui a trois branches : DVI, HD15 et S-video. Dans ce cas, le pilote de miniport d’affichage aurait déjà énuméré trois périphériques enfants associés à un seul connecteur DVI physique : DVI-on-DVI, HD15-on-DVI et S-video-on-DVI. Chacun de ces appareils enfants aurait un type de TypeVideoOutput et une valeur de reconnaissance HPD de HpdAwarenessInterruptible. La liste suivante décrit les étapes suivies lorsqu’un moniteur est connecté à la branche HD15 du dongle.
L’adaptateur graphique détecte un événement hot-plug et génère une interruption.
L’interruption est gérée par la fonction DxgkDdiInterruptRoutine du pilote miniport d’affichage, qui planifie un appel de procédure différée (DPC). Par la suite, la fonction de rappel DPC du pilote miniport d’affichage est appelée.
La fonction de rappel DPC détermine que l’événement hot-plug se trouvait sur la branche HD15 du dongle (HD15-on-DVI).
Les fonctions de rappel DPC transmettent une structure DXGK_CHILD_STATUS à DxgkCbIndicateChildStatus pour signaler la status de la sortie vidéo HD15-on-DVI. Le membre ChildUid de la structure DXGK_CHILD_STATUS identifie la sortie vidéo, et le membre HotPlug.Connected (défini sur TRUE dans ce cas) indique qu’un périphérique d’affichage externe est connecté.
La liste suivante décrit les étapes suivies lorsque le couvercle est fermé sur un ordinateur portable.
Le couvercle est fermé sur un ordinateur portable, ce qui génère un événement ACPI. Par la suite, la fonction DxgkDdiNotifyAcpiEvent du pilote miniport d’affichage est appelée.
DxgkDdiNotifyAcpiEvent transmet une structure de DXGK_CHILD_STATUS à la fonction DxgkCbIndicateChildStatus du pilote de port d’affichage pour signaler la status de l’appareil enfant associé au panneau d’affichage intégré. Plus précisément, DxgkDdiNotifyAcpiEvent définit le membre HotPlug.Connected de la structure DXGK_CHILD_STATUS sur FALSE.