Suporte a controles de brilho em painéis de exibição integrados
Este artigo descreve os mecanismos e requisitos para suportar controles de brilho em painéis de exibição integrados. Ele descreve a colaboração entre o driver de monitor fornecido pelo sistema (Monitor.sys), os drivers de miniporta de exibição no modo kernel (KMD) e o BIOS por meio de métodos ACPI. Seja por meio de KMD ou ACPI, o objetivo é garantir que os usuários possam ajustar facilmente o brilho da tela, aprimorando sua experiência de computação e otimizando o uso de energia.
Suporte de controle de brilho em Monitor.sys
Os controles de brilho são implementados em Monitor.sys. Este driver de monitor fornecido pelo sistema fornece o seguinte suporte:
Implementa uma interface WMI (Instrumentação de Gerenciamento do Windows) para permitir que aplicativos (como o controle deslizante de brilho do sistema operacional) interajam com o nível de brilho.
Registra-se no DPPE (Mecanismo de Política de Energia do Dispositivo) para que os níveis de brilho respondam às alterações na política de energia.
Registra-se na ACPI (Interface de Energia e Configuração Avançada) para processar teclas de atalho de brilho baseadas em ACPI. Para compatibilidade com o modelo de driver de exibição herdado do Windows 2000, o driver do monitor implementa os controles de brilho baseados em IOCTL.
O KMD (driver de miniporte de exibição) do modo kernel ou os métodos ACPI expostos pelo BIOS podem dar suporte à alteração do brilho de um painel de exibição integrado. Para o primeiro destino de vídeo marcado como tendo tecnologia de saída que se conecta internamente em um computador (D3DKMDT_VOT_INTERNAL), o driver do monitor chama a função DxgkDdiQueryInterface do KMD para consultar as duas interfaces a seguir:
A interface de controle de brilho. GUID_DEVINTERFACE_BRIGHTNESS e DXGK_BRIGHTNESS_INTERFACE_VERSION_1 identifica essa interface.
A interface de controle de brilho V.2. GUID_DEVINTERFACE_BRIGHTNESS_2 e DXGK_BRIGHTNESS_INTERFACE_VERSION_2 identifica essa interface.
Se o KMD não der suporte a pelo menos a Interface de Controle de Brilho, o driver do monitor usará a ACPI para consultar os métodos _BCL, _BCM e _BQC no dispositivo filho. Para obter mais informações sobre esses métodos, consulte a especificação ACPI no site da ACPI.
Observação
No WDDM (Modelo de Driver de Exibição) do Windows, um identificador ACPI não é usado para identificar um painel de exibição integrado. Isso é diferente do Modelo de Driver de Exibição do Windows 2000, que oferece suporte apenas a painéis de exibição com um identificador de 0x0110.
Se os métodos ACPI expostos ao KMD ou ao BIOS derem suporte a controles de brilho, o driver do monitor se registrará para notificações ACPI de teclas de atalho de brilho. Não existe nenhum mecanismo alternativo para sinalizar o driver do monitor sobre notificações de teclas de atalho. Se o driver do monitor não puder usar o mecanismo de controle de brilho ou se o KMD fornecer a interface de controle de brilho, mas falhar em uma chamada para a função DxgkDdiGetPossibleBrightness, o driver do monitor não dará suporte a controles de brilho.
Níveis de brilho
Os níveis de brilho são representados como valores de byte único no intervalo de zero a 100, em que zero está desativado e 100 é o brilho máximo suportado por um laptop. Todo laptop deve relatar um nível máximo de brilho de 100; No entanto, um laptop não é necessário para dar suporte a um nível de zero.
O único requisito para valores de zero a 100 é que valores maiores representem níveis de brilho mais altos. O incremento entre os níveis não precisa ser uniforme, e um laptop pode dar suporte a qualquer número de valores distintos até o máximo de 101 níveis. Você deve decidir como mapear os níveis de hardware para o intervalo de valores de nível de brilho. No entanto, uma chamada para a função DxgkDdiGetPossibleBrightness do KMD não deve relatar mais valores de nível de brilho do que o hardware dá suporte.
Desativando as alterações automáticas de brilho pelo BIOS
O KMD deve definir o bit 2 do argumento para o método _DOS. Definir esse bit evita problemas que podem ocorrer se o BIOS do sistema e o driver do monitor controlarem o brilho do painel de exibição. Para obter mais informações sobre o método _DOS e seus argumentos, consulte a especificação ACPI. Ao definir o bit 2, o BIOS do sistema é informado de que não deve realizar nenhuma alteração automática de brilho.
Requisitos do BIOS para suportar controles de brilho
Para que o KMD dê suporte ao controle do brilho do painel integrado de maneira ideal, o BIOS do sistema deve fornecer os seguintes itens por meio da ACPI.
Métodos de controle de brilho
Um dispositivo de painel integrado deve dar suporte aos métodos de controle de brilho ACPI (_BCL, _BCM e _BQC). _BCL e _BCM permanecem inalterados desde a versão 1.0b da especificação ACPI; você pode encontrar suas definições na especificação ACPI 3.0 nas seções B.6.2 e B.6.3. _BQC é opcional e é definido na especificação ACPI 3.0 na seção B.6.4. Para obter definições de níveis de brilho, consulte Níveis de brilho.
A seguir estão os aliases para os métodos de controle de brilho ACPI definidos em Dispmprt.h:
ACPI_METHOD_OUTPUT_BCL - Permite que o Windows consulte uma lista de níveis de brilho compatíveis com os dispositivos de saída de vídeo. Este método é necessário se um LCD integrado estiver presente e suportar níveis de brilho.
ACPI_METHOD_OUTPUT_BCM - Permite que o Windows defina o nível de brilho do dispositivo de saída de vídeo. O Windows define apenas os níveis relatados pelo método ACPI_METHOD_OUTPUT_BCL. O método ACPI_METHOD_OUTPUT_BCM é necessário se o método ACPI_METHOD_OUTPUT_BCL for implementado.
Desativando o controle automático de brilho do BIOS do sistema
O BIOS do sistema deve suportar a configuração do bit 2 do argumento para o método _DOS no adaptador gráfico para permitir que as alterações automáticas de brilho do BIOS do sistema sejam desativadas. Esse bit é uma adição aos valores definidos anteriormente para os bits neste método. Para obter detalhes sobre esse bit, consulte a seção B.4.1 na especificação ACPI 3.0.
Se esse bit não for compatível, o driver do monitor e o BIOS do sistema poderão alterar o nível de brilho, resultando em uma cintilação de brilho. Além disso, o brilho pode ser definido como um valor que não é o que o usuário solicitou.
ACPI_METHOD_DISPLAY_DOS, definido em Dispmprt.h, é o alias para o método de controle automático de brilho ACPI. Esse alias indica que o BIOS do sistema é capaz de alternar automaticamente a saída de exibição ativa ou controlar o brilho do LCD. Seu parâmetro pode usar um dos valores a seguir.
Valor | Significado |
---|---|
ACPI_ARG_ENABLE_AUTO_LCD_BRIGHTNESS | O BIOS do sistema deve controlar automaticamente o nível de brilho do LCD quando a energia muda de CA para CC. |
ACPI_ARG_DISABLE_AUTO_LCD_BRIGHTNESS | O BIOS do sistema não deve controlar automaticamente o nível de brilho do LCD quando a energia muda de CA para CC. |
Notificações de teclas de atalho de brilho
As notificações de tecla de atalho de brilho devem ser direcionadas ao dispositivo do painel de exibição integrado, não ao adaptador gráfico.
As seguintes notificações são suportadas conforme definido em Dispmprt.h:
Notificação | Significado |
---|---|
ACPI_NOTIFY_CYCLE_BRIGHTNESS_HOTKEY | O usuário pressionou a tecla de atalho para alternar o brilho da tela. |
ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY | O usuário pressionou a tecla de atalho para aumentar o brilho da tela. |
ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY | O usuário pressionou a tecla de atalho para diminuir o brilho da tela. |
ACPI_NOTIFY_ZERO_BRIGHTNESS_HOTKEY | O usuário pressionou a tecla de atalho para reduzir o brilho da tela a zero. |
Essas notificações de tecla de atalho eram novas na especificação ACPI 3.0 e são descritas na seção B.7. Normalmente, um laptop não suportaria todas essas notificações de teclas de atalho.
Para aumentar e diminuir os níveis de brilho, o comportamento padrão do driver do monitor é:
Por ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY, aumente o brilho em pelo menos cinco por cento a mais do que o nível de brilho anterior até que o próximo nível de passo de cinco por cento disponível seja atingido (5, 10, 15, ..., 95, 100).
Para ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY, diminua o brilho em pelo menos cinco por cento menos que o nível de brilho anterior até que o próximo nível de cinco por cento disponível seja atingido (100, 95, ..., 15, 10, 5).
Incrementar ou diminuir com teclas de atalho pode criar padrões assimétricos nos níveis de brilho, como mostram os exemplos a seguir.
Disponível _BCL níveis de controle de brilho especificados como 0, 1, 5, 10, ..., 95, 100
Resultados usando a notificação 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 usando a notificação 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
Disponível _BCL níveis de controle de brilho especificados como 1, 5, 10, ..., 95, 100
Resultados usando a notificação 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 usando a notificação 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
No último exemplo, 1 é o último valor disponível, portanto, o driver define o nível de brilho como 1, mesmo que seja menos de cinco unidades percentuais diferentes do valor anterior de 5.
Um IHV ou OEM pode alterar o comportamento padrão do driver de monitor no Windows Vista e Windows 7 definindo um valor DWORD para MinimumStepPercentage na seguinte chave do Registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\monitor\Parameters\