Soporte de controles de brillo en pantallas integradas
En este artículo se describen los mecanismos y requisitos para controles de brillo compatibles en pantallas integradas. Describe la colaboración entre el controlador de monitor suministrado por el sistema (Monitor.sys), los controladores de minipuerto de pantalla en modo kernel (KMD) y la BIOS a través de métodos ACPI. Ya sea mediante KMD o ACPI, el objetivo es garantizar que los usuarios puedan ajustar fácilmente el brillo de su pantalla y mejorar su experiencia informática y optimizando el consumo de energía.
Los controles de brillo se implementan en Monitor.sys. Este controlador de monitor suministrado por el sistema proporciona el siguiente soporte:
Implementa una interfaz de Windows Management Instrumentation (WMI) para permitir que las aplicaciones (como el control deslizante de brillo del sistema operativo) interactúen con el nivel de brillo.
Se registra con el Device Power Policy Engine (DPPE) para que los niveles de brillo respondan a los cambios en la política de energía.
Se registra con el Device Power Policy Engine (DPPE) para procesar teclas de método abreviado de brillo basadas en ACPI. Por compatibilidad con el modelo heredado de controlador de pantalla de Windows 2000, el controlador del monitor implementa los controles de brillo basados en IOCTL.
Tanto el controlador de minipuerto de pantalla en modo kernel (KMD) como los métodos ACPI expuestos por la BIOS pueden soportar el cambio de brillo de un panel de pantalla integrado. Para el primer objetivo de video marcado como con tecnología de salida que se conecta internamente en un equipo (D3DKMDT_VOT_INTERNAL), el controlador del monitor llama a la función DxgkDdiQueryInterface del KMD para consultar por las dos interfaces siguientes:
La interfaz de control de brillo. GUID_DEVINTERFACE_BRIGHTNESS y DXGK_BRIGHTNESS_INTERFACE_VERSION_1 identifican esta interfaz.
La interfaz de control de brillo V.2. GUID_DEVINTERFACE_BRIGHTNESS_2 y DXGK_BRIGHTNESS_INTERFACE_VERSION_2 identifican esta interfaz.
Si el KMD no admite al menos la interfaz de control de brillo, el controlador del monitor utiliza ACPI para consultar los métodos _BCL, _BCM y _BQC en el dispositivo secundario. Para obtener más información sobre estos métodos, consulte la especificación ACPI en el sitio web de ACPI.
Nota
En el modelo de controlador de pantalla de Windows (WDDM) no se usa un identificador ACPI para identificar un panel de pantalla integrado. Esto difiere del modelo de controlador de pantalla de Windows 2000, que solo admite paneles de visualización con un identificador de 0x0110.
Si los métodos ACPI expuestos por KMD o BIOS admiten controles de brillo, el controlador del monitor se registra para recibir notificaciones ACPI de teclas de acceso directo de brillo. No existe ningún mecanismo alternativo para indicar al controlador del monitor las notificaciones de teclas de acceso directo. Si el controlador del monitor no puede usar ninguno de los mecanismos de control de brillo o si KMD proporciona la interfaz de control de brillo pero falla una llamada a la función DxgkDdiGetPossibleBrightness, el controlador del monitor no admite controles de brillo.
Los niveles de brillo se representan como valores de un byte en el rango de cero a 100, donde cero es apagado y 100 es el brillo máximo que admite un ordenador portátil. Todos los ordenadores portátiles deben informar de un nivel de brillo máximo de 100. Sin embargo, no es necesario que un ordenador portátil admita un nivel de cero.
El único requisito para los valores de cero a 100 es que los valores mayores deben representar niveles de brillo más altos. No es necesario que el incremento entre niveles sea uniforme, y un ordenador portátil puede admitir cualquier número de valores distintos hasta un máximo de 101 niveles. Debe decidir cómo asignar niveles de hardware al intervalo de valores de nivel de brillo. Sin embargo, una llamada a la función DxgkDdiGetPossibleBrightness del KMD no debería informar de más valores de nivel de brillo de los que soporta el hardware.
El KMD debe establecer el bit 2 del argumento del método _DOS. Al establecer este bit se evitan los problemas que podrían producirse si tanto la BIOS del sistema como el controlador del monitor controlan el brillo del panel de visualización. Para obtener más información sobre el método _DOS y sus argumentos, consulte la especificación ACPI. Al establecer el bit 2, se informa a la BIOS del sistema de que no debe realizar ningún cambio automático del brillo.
Para que el KMD sea compatible ocn el control del brillo del panel integrado de forma óptima, la BIOS del sistema debe proporcionar los siguientes elementos a través del ACPI.
Un dispositivo de panel integrado debe ser compatible con los métodos de control de brillo ACPI (_BCL, _BCM y _BQC). _BCL y _BCM no han cambiado desde la versión 1.0b de la especificación ACPI; puede encontrar sus definiciones en la especificación ACPI 3.0 en las secciones B.6.2 y B.6.3. _BQC es opcional y se define en la especificación ACPI 3.0 en la sección B.6.4. Para las definiciones de los niveles de brillo, consulte Niveles de brillo.
Los siguientes son los alias para los métodos de control de brillo ACPI definidos en Dispmprt.h:
ACPI_METHOD_OUTPUT_BCL - Permite a Windows consultar una lista de niveles de brillo compatibles con los dispositivos de salida de pantalla. Este método es necesario si una pantalla LCD integrada está presente y es compatible con niveles de brillo.
ACPI_METHOD_OUTPUT_BCM - Permite a Windows establecer el nivel de brillo del dispositivo de salida de pantalla. Windows solo establece los niveles indicados por el método ACPI_METHOD_OUTPUT_BCL. El método ACPI_METHOD_OUTPUT_BCM es necesario si se implementa el método ACPI_METHOD_OUTPUT_BCL.
La BIOS del sistema debe ser compatible con la configuración del bit 2 del argumento del método _DOS en el adaptador gráfico para permitir la desactivación de los cambios automáticos de brillo de la BIOS del sistema. Este bit es una adición a los valores previamente definidos para los bits de este método. Para más detalles sobre este bit, consulte la sección B.4.1 de la especificación ACPI 3.0.
Si este bit no es compatible tanto el controlador del monitor como la BIOS del sistema pueden cambiar el nivel de brillo, dando como resultado un parpadeo del brillo. Además, es posible que el brillo se establezca en un valor distinto al solicitado por el usuario.
ACPI_METHOD_DISPLAY_DOS, definido en Dispmprt.h, es el alias para el método de control automático del brillo ACPI. Este alias indica que la BIOS del sistema es capaz de conmutar automáticamente la salida de pantalla activa o controlar el brillo de la pantalla LCD. Su parámetro puede ser uno de los siguientes valores.
Valor | Significado |
---|---|
ACPI_ARG_ENABLE_AUTO_LCD_BRIGHTNESS | La BIOS del sistema debe controlar automáticamente el nivel de brillo de la pantalla LCD cuando la alimentación cambia de CA a CC. |
ACPI_ARG_DISABLE_AUTO_LCD_BRIGHTNESS | La BIOS del sistema no debe controlar automáticamente el nivel de brillo de la pantalla LCD cuando la alimentación cambia de CA a CC. |
Las notificaciones de las teclas de acceso directo al brillo deben dirigirse al dispositivo del panel de visualización integrado, no al adaptador gráfico.
Se admiten las siguientes notificaciones definidas en Dispmprt.h:
Notificación | Significado |
---|---|
ACPI_NOTIFY_CYCLE_BRIGHTNESS_HOTKEY | El usuario ha pulsado la tecla de acceso rápido para cambiar el brillo de la pantalla. |
ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY | El usuario ha pulsado la tecla de acceso directo para aumentar el brillo de la pantalla. |
ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY | El usuario ha pulsado la tecla de acceso directo para reducir el brillo de la pantalla. |
ACPI_NOTIFY_ZERO_BRIGHTNESS_HOTKEY | El usuario ha pulsado la tecla de acceso directo para reducir el brillo de la pantalla a cero. |
Estas notificaciones de teclas de acceso directo son nuevas en la especificación ACPI 3.0 y se describen en la sección B.7. Normalmente, un ordenador portátil no sería compatible con todas estas notificaciones de teclas de acceso directo.
Para aumentar y disminuir los niveles de brillo, el comportamiento predeterminado del controlador del monitor es:
Para ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY, incrementa el brillo en al menos un cinco por ciento más que el nivel de brillo anterior hasta alcanzar el siguiente nivel de paso del cinco por ciento disponible (5, 10, 15, ..., 95, 100).
Para ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY, disminuye el brillo al menos un cinco por ciento menos que el nivel de brillo anterior hasta alcanzar el siguiente nivel de paso del cinco por ciento disponible (100, 95, ..., 15, 10, 5).
Aumentar o disminuir con las teclas de acceso directo puede crear patrones asimétricos en los niveles de brillo, como muestran los siguientes ejemplos.
Niveles de control de brillo _BCL disponibles especificados como 0, 1, 5, 10, ..., 95, 100
Resultados utilizando la notificación ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY:
0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100Resultados utilizando la notificación ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY:
100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 0
Niveles de control de brillo _BCL disponibles especificados como 1, 5, 10, ..., 95, 100
Resultados utilizando la notificación ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY:
1, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100Resultados utilizando la notificación ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY:
100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 1
En el último ejemplo, 1 es el último valor disponible, por lo que el controlador establece el nivel de brillo en 1 aunque sea menos de cinco unidades porcentuales diferente del valor anterior de 5.
Un IHV u OEM puede cambiar el comportamiento predeterminado del controlador del monitor en Windows Vista y Windows 7 estableciendo un valor DWORD para MinimumStepPercentage en la siguiente clave del registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\monitor\Parameters\