Supervisión de la detección de enchufes activos
La información de esta página se aplica a los controladores de gráficos que se implementan con una versión anterior a WDDM versión 2.2.
Una salida de vídeo en un adaptador de pantalla se considera un dispositivo secundario del adaptador de pantalla. Un monitor u otro dispositivo de pantalla externo que se conecta a la salida no se considera un dispositivo secundario. Durante la inicialización, la función DxgkDdiQueryChildRelations del controlador de minipuerto de pantalla asigna a cada dispositivo secundario un tipo y un valor de reconocimiento de HPD. El tipo es uno de los enumeradores de DXGK_CHILD_DEVICE_TYPE :
TypeVideoOutput
TypeOther
El valor de reconocimiento de HPD es uno de los enumeradores de DXGK_CHILD_DEVICE_HPD_AWARENESS :
HpdAwarenessAlwaysConnected
HpdAwarenessInterruptible
HpdAwarenessPolled
Un dispositivo secundario que tiene un tipo de TypeVideoOutput y cualquier valor de reconocimiento de HPD distinto de HpdAwarenessAlwaysConnected se denomina conector de salida de vídeo.
Si el controlador de minipuerto de pantalla no puede determinar si un monitor está conectado a la salida de vídeo, el controlador debe emular el comportamiento de un dispositivo interrumpible, con el valor de reconocimiento de HPD establecido en HpdAwarenessInterruptible. Si el controlador de minipuerto de pantalla debe indicar que se debe conectar un monitor interrumpible a la salida de vídeo, como cuando un usuario escribe un método abreviado de teclado para cambiar a una vista de televisión, el controlador debe llamar a la función DxgkCbIndicateChildStatus con ChildStatus. HotPlug. Conectado establecido en TRUE.
En ciertos momentos, el sistema operativo solicita que el controlador de minipuerto de pantalla notifique el estado de todos los conectores de salida de vídeo que tienen un valor de reconocimiento hpdAwarenessPolled. No hay ningún intervalo de sondeo normal; en su lugar, la solicitud se realiza cuando hay una necesidad específica de actualizar la lista de dispositivos y modos de visualización disponibles. Por ejemplo, cuando se acopla un equipo portátil, el sistema operativo debe saber si un monitor está conectado a la salida de vídeo en la estación de acoplamiento. El sistema operativo realiza la solicitud llamando a la función DxgkDdiQueryChildStatus del controlador de miniporte de pantalla para cada dispositivo secundario que tenga un valor de reconocimiento hpdAwarenessPolled.
En el caso de los conectores de salida de vídeo que tienen un valor de reconocimiento hpdAwarenessInterruptible, el controlador de miniporte de pantalla es responsable de notificar al sistema operativo cada vez que un dispositivo de pantalla externo está conectado o desconectado. El código de control de interrupciones del controlador de miniporte de pantalla llama a la función DxgkCbIndicateChildStatus del controlador de puerto de pantalla para informar de que un dispositivo de pantalla externo se ha conectado o desconectado de una salida de vídeo determinada. Cuando se acopla un equipo portátil, la función DxgkDdiNotifyAcpiEvent del controlador de minipuerto de pantalla debe llamar a DxgkCbIndicateChildStatus para cada salida de vídeo de la estación de acoplamiento que tenga un valor de reconocimiento HPD de HpdAwarenessInterruptible.
Si un conector con un valor de reconocimiento de HPD de HpdAwarenessPolled no está disponible (es decir, cubierto) cuando se acopla un equipo portátil, la función DxgkDdiNotifyAcpiEvent del controlador de miniport display debe llamar a DxgkCbIndicateChildStatus para informar de que el conector está desconectado.
La salida de vídeo asociada a un panel de pantalla integrado en un equipo portátil es un caso inusual. El sistema operativo debe saber si la tapa del equipo portátil está abierta o cerrada, por lo que la idea de conectado se usa para significar abrir y la idea de no conectado se usa para significar cerrado. La salida de vídeo asociada a una pantalla integrada en un equipo portátil tiene un valor de reconocimiento HPD de HpdAwarenessInterruptible. Sin embargo, esto no significa que el adaptador de pantalla genere una interrupción cuando se abra o cierre la tapa. En su lugar, el BIOS ACPI genera una interrupción cuando se abre o cierra la tapa. Esa interrupción da como resultado una llamada a la función DxgkDdiNotifyAcpiEvent del controlador de miniporte de pantalla, que llama a DxgkCbIndicateChildStatus para informar del estado (abierto o cerrado) de la tapa. El controlador de minipuerto de pantalla notifica el estado de la tapa estableciendo el miembro HotPlug.Connected de una estructura de DXGK_CHILD_STATUS en TRUE (abierto) o FALSE (cerrado) y pasando la estructura de DXGK_CHILD_STATUS a DxgkCbIndicateChildStatus.
En la lista siguiente se describen los pasos que se siguen cuando un monitor está conectado a un conector HD15, suponiendo que el conector tenga un valor de reconocimiento hpdAwarenessPolled.
Un monitor está conectado al conector HD15 en el adaptador de pantalla. El adaptador de pantalla no detecta esto como un evento hot-plug.
En algún momento futuro, una aplicación en modo de usuario solicita una lista de dispositivos de visualización.
Para cada conector de salida de vídeo en el adaptador de pantalla que tiene un valor de reconocimiento de HPD hpdAwarenessPolled, el administrador VidPN llama a la función DxgkDdiQueryChildStatus del controlador de minipuerto de pantalla para determinar si un dispositivo de pantalla externo está conectado. Cuando se llama a DxgkDdiQueryChildStatus para el conector HD15, informa de que un monitor externo está realmente conectado.
En la lista siguiente se describen los pasos que se siguen cuando un monitor está conectado a un conector DVI, suponiendo que el conector tenga un valor de reconocimiento hpdAwarenessInterruptible.
Un panel plano está conectado al conector DVI en el adaptador de pantalla.
El adaptador de pantalla detecta un evento hot-plug y genera una interrupción.
La interrupción se controla mediante la función DxgkDdiInterruptRoutine del controlador de miniporte de pantalla, que programa una llamada de procedimiento diferida (DPC). Posteriormente, se llama a la función de devolución de llamada DPC del controlador de minipuerto de pantalla.
La función de devolución de llamada DPC pasa una estructura de DXGK_CHILD_STATUS a la función DxgkCbIndicateChildStatus del controlador de puerto de visualización para notificar el estado del conector DVI. El miembro ChildUid de la estructura DXGK_CHILD_STATUS identifica el conector DVI y el miembro HotPlug.Connected (establecido en TRUE en este caso) indica que un dispositivo de pantalla externo está conectado.
Supongamos que un conector DVI admite un dongle que tiene tres ramas: DVI, HD15 y S-video. En ese caso, el controlador de minipuerto de pantalla habría enumerado previamente tres dispositivos secundarios asociados al conector DVI físico: DVI-on-DVI, HD15-on-DVI y S-video-on-DVI. Cada uno de esos dispositivos secundarios tendría un tipo de TypeVideoOutput y un valor de reconocimiento de HPD de HpdAwarenessInterruptible. En la lista siguiente se describen los pasos que se siguen cuando un monitor está conectado a la rama HD15 del dongle.
El adaptador de pantalla detecta un evento hot-plug y genera una interrupción.
La interrupción se controla mediante la función DxgkDdiInterruptRoutine del controlador de miniporte de pantalla, que programa una llamada de procedimiento diferida (DPC). Posteriormente, se llama a la función de devolución de llamada DPC del controlador de minipuerto de pantalla.
La función de devolución de llamada DPC determina que el evento hot-plug estaba en la rama HD15 del dongle (HD15-on-DVI).
Las funciones de devolución de llamada DPC pasan una estructura de DXGK_CHILD_STATUS a DxgkCbIndicateChildStatus para notificar el estado de la salida de vídeo HD15 on-DVI. El miembro ChildUid de la estructura DXGK_CHILD_STATUS identifica la salida de vídeo y el miembro HotPlug.Connected (establecido en TRUE en este caso) indica que un dispositivo de pantalla externo está conectado.
En la lista siguiente se describen los pasos que se siguen cuando la tapa está cerrada en un equipo portátil.
La tapa está cerrada en un equipo portátil, que genera un evento ACPI. Posteriormente, se llama a la función DxgkDdiNotifyAcpiEvent del controlador de minipuerto de pantalla.
DxgkDdiNotifyAcpiEvent pasa una estructura de DXGK_CHILD_STATUS a la función DxgkCbIndicateChildStatus del controlador de puerto para mostrar el estado del dispositivo secundario asociado al panel de visualización integrado. En concreto, DxgkDdiNotifyAcpiEvent establece el miembro HotPlug.Connected de la estructura DXGK_CHILD_STATUS en FALSE.