Prise en charge des contrôles de luminosité sur les panneaux d’affichage intégrés
Cet article décrit les mécanismes et les exigences pour la prise en charge des contrôles de luminosité sur les panneaux d’affichage intégrés. Il souligne la collaboration entre le pilote de moniteur fourni par le système (Monitor.sys), les pilotes miniports d’affichage en mode noyau (KMD), et le BIOS via des méthodes ACPI. Que ce soit via le KMD ou l’ACPI, l’objectif est de garantir que les utilisateurs puissent facilement ajuster la luminosité de leur écran, améliorant ainsi leur expérience informatique tout en optimisant la consommation d’énergie.
Prise en charge du contrôle de la luminosité dans Monitor.sys
Les contrôles de luminosité sont implémentés dans Monitor.sys. Ce pilote de moniteur fourni par le système assure la prise en charge suivante :
Il implémente une interface Windows Management Instrumentation (WMI) permettant aux applications (telles que le curseur de luminosité du système d’exploitation) d’interagir avec le niveau de luminosité.
Il s’enregistre auprès du moteur de politique d’alimentation des périphériques (DPPE) afin que les niveaux de luminosité répondent aux changements de la politique d’alimentation.
Il s’enregistre auprès de l’Interface de Configuration Avancée et d’Alimentation (ACPI) pour traiter les touches de raccourci de luminosité basées sur l’ACPI. Pour la compatibilité avec l’ancien Windows 2000 Display Driver Model, le pilote de moniteur implémente les contrôles de luminosité basés sur IOCTL.
Le pilote miniport d’affichage en mode noyau (KMD) ou les méthodes ACPI exposées par le BIOS peuvent supporter le changement de la luminosité d’un panneau d’affichage intégré. Pour la première cible vidéo marquée comme ayant une technologie de sortie connectée en interne dans un ordinateur (D3DKMDT_VOT_INTERNAL), le pilote de moniteur appelle la fonction DxgkDdiQueryInterface du KMD pour interroger les deux interfaces suivantes :
L’interface de contrôle de la luminosité. GUID_DEVINTERFACE_BRIGHTNESS et DXGK_BRIGHTNESS_INTERFACE_VERSION_1 identifient cette interface.
L’interface de contrôle de la luminosité V.2. GUID_DEVINTERFACE_BRIGHTNESS_2 et DXGK_BRIGHTNESS_INTERFACE_VERSION_2 identifient cette interface.
Si le KMD ne prend pas en charge au moins l’interface de contrôle de la luminosité, le pilote de moniteur utilise l’ACPI pour interroger les méthodes _BCL, _BCM et _BQC sur le périphérique enfant. Pour plus d’informations sur ces méthodes, veuillez consulter la spécification ACPI sur le site ACPI.
Remarque
Dans le Windows Display Driver Model (WDDM), un identifiant ACPI n’est pas utilisé pour identifier un panneau d’affichage intégré. Cela diffère du Windows 2000 Display Driver Model, qui ne prend en charge que les panneaux d’affichage avec un identifiant de 0x0110.
Si les méthodes ACPI exposées par le KMD ou le BIOS prennent en charge les contrôles de luminosité, le pilote de moniteur s’enregistre pour recevoir des notifications ACPI concernant les touches de raccourci de luminosité. Aucun autre mécanisme alternatif n’existe pour signaler au pilote de moniteur les notifications des touches de raccourci. Si le pilote de moniteur ne peut utiliser aucun des mécanismes de contrôle de la luminosité ou si le KMD fournit l’interface de contrôle de la luminosité mais échoue à un appel à la fonction DxgkDdiGetPossibleBrightness, le pilote de moniteur ne prend pas en charge les contrôles de luminosité.
Niveaux de luminosité
Les niveaux de luminosité sont représentés sous forme de valeurs sur un octet dans la plage de zéro à 100, où zéro correspond à l’extinction et 100 correspond à la luminosité maximale qu’un ordinateur portable prend en charge. Chaque ordinateur portable doit signaler un niveau de luminosité maximal de 100 ; cependant, il n’est pas requis qu’un ordinateur portable prenne en charge un niveau de zéro.
La seule exigence pour les valeurs de zéro à 100 est que des valeurs plus élevées doivent représenter des niveaux de luminosité plus élevés. L’incrément entre les niveaux n’est pas tenu d’être uniforme, et un ordinateur portable peut prendre en charge n’importe quel nombre de valeurs distinctes jusqu’à un maximum de 101 niveaux. Vous devez décider comment mapper les niveaux matériels à la plage de valeurs de niveaux de luminosité. Cependant, un appel à la fonction DxgkDdiGetPossibleBrightness du KMD ne devrait pas signaler plus de valeurs de niveaux de luminosité que ce que le matériel prend en charge.
Désactivation des changements automatiques de luminosité par le BIOS
Le KMD doit définir le bit 2 de l’argument à la méthode _DOS. La définition de ce bit permet d’éviter des problèmes pouvant survenir si le BIOS du système et le pilote de moniteur contrôlent tous deux la luminosité du panneau d’affichage. Pour plus d’informations sur la méthode _DOS et ses arguments, consultez la spécification ACPI. En définissant le bit 2, le BIOS du système est informé qu’il ne doit pas effectuer de changements automatiques de luminosité.
Exigences du BIOS pour la prise en charge des contrôles de luminosité
Pour que le KMD prenne en charge de manière optimale le contrôle de la luminosité du panneau intégré, le BIOS du système doit fournir les éléments suivants via l’ACPI.
Méthodes de contrôle de la luminosité
Un appareil de panneau intégré doit prendre en charge les méthodes de contrôle de la luminosité ACPI (_BCL, _BCM et _BQC). _BCL et _BCM sont inchangés depuis la version 1.0b de la spécification ACPI ; vous pouvez trouver leurs définitions dans la spécification ACPI 3.0 aux sections B.6.2 et B.6.3. _BQC est facultatif et est défini dans la spécification ACPI 3.0 à la section B.6.4. Pour les définitions des niveaux de luminosité, veuillez consulter la rubrique Niveaux de luminosité.
Les alias suivants sont attribués aux méthodes de contrôle de la luminosité ACPI définies dans Dispmprt.h :
ACPI_METHOD_OUTPUT_BCL - Permet à Windows d’interroger une liste de niveaux de luminosité pris en charge par les périphériques de sortie d’affichage. Cette méthode est requise si un écran LCD intégré est présent et prend en charge les niveaux de luminosité.
ACPI_METHOD_OUTPUT_BCM - Permet à Windows de définir le niveau de luminosité du périphérique de sortie d’affichage. Windows ne définit que des niveaux signalés par la méthode ACPI_METHOD_OUTPUT_BCL. La méthode ACPI_METHOD_OUTPUT_BCM est requise si la méthode ACPI_METHOD_OUTPUT_BCL est implémentée.
Désactivation du contrôle automatique de la luminosité du BIOS du système
Le BIOS du système doit prendre en charge la définition du bit 2 de l’argument à la méthode _DOS sur l’adaptateur graphique pour permettre la désactivation des changements automatiques de luminosité du BIOS du système. Ce bit est une addition aux valeurs précédemment définies pour les bits de cette méthode. Pour plus de détails sur ce bit, consultez la section B.4.1 de la spécification ACPI 3.0.
Si ce bit n’est pas pris en charge, le pilote de moniteur et le BIOS du système peuvent tous deux modifier le niveau de luminosité, entraînant un scintillement de la luminosité. De plus, la luminosité pourrait être réglée sur une valeur différente de celle demandée par l’utilisateur.
ACPI_METHOD_DISPLAY_DOS, défini dans Dispmprt.h, est l’alias de la méthode de contrôle automatique de la luminosité ACPI. Cet alias indique que le BIOS du système est capable de basculer automatiquement la sortie d’affichage active ou de contrôler la luminosité de l’écran LCD. Son paramètre peut avoir l’une des valeurs suivantes.
Valeur | Signification |
---|---|
ACPI_ARG_ENABLE_AUTO_LCD_BRIGHTNESS | Le BIOS du système doit contrôler automatiquement le niveau de luminosité de l’écran LCD lorsque l’alimentation passe du courant alternatif au courant continu. |
ACPI_ARG_DISABLE_AUTO_LCD_BRIGHTNESS | Le BIOS du système ne doit pas contrôler automatiquement le niveau de luminosité de l’écran LCD lorsque l’alimentation passe du courant alternatif au courant continu. |
Notifications des touches de raccourci de luminosité
Les notifications des touches de raccourci de luminosité doivent être ciblées sur le périphérique du panneau d’affichage intégré, et non sur l’adaptateur graphique.
Les notifications suivantes sont prises en charge telles que définies dans Dispmprt.h :
Notification | Signification |
---|---|
ACPI_NOTIFY_CYCLE_BRIGHTNESS_HOTKEY | L’utilisateur a appuyé sur la touche de raccourci pour faire défiler la luminosité de l’écran. |
ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY | L’utilisateur a appuyé sur la touche de raccourci pour augmenter la luminosité de l’écran. |
ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY | L’utilisateur a appuyé sur la touche de raccourci pour diminuer la luminosité de l’écran. |
ACPI_NOTIFY_ZERO_BRIGHTNESS_HOTKEY | L’utilisateur a appuyé sur la touche de raccourci pour réduire la luminosité à zéro. |
Ces notifications de touches de raccourci sont nouvelles dans la spécification ACPI 3.0 et sont décrites dans la section B.7. En général, un ordinateur portable ne prendrait pas en charge toutes ces notifications de touches de raccourci.
Pour l’augmentation et la diminution des niveaux de luminosité, le comportement par défaut du pilote de moniteur est le suivant :
Pour ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY, augmenter la luminosité d’au moins cinq pour cent par rapport au niveau de luminosité précédent jusqu’à ce que le prochain niveau de cinq pour cent soit atteint (5, 10, 15, ..., 95, 100).
Pour ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY, diminuer la luminosité d’au moins cinq pour cent par rapport au niveau de luminosité précédent jusqu’à ce que le prochain niveau de cinq pour cent soit atteint (100, 95, ..., 15, 10, 5).
L’incrément ou le décrément avec les touches de raccourci peut créer des modèles asymétriques dans les niveaux de luminosité, comme le montrent les exemples suivants.
Niveaux de contrôle de la luminosité _BCL disponibles spécifiés comme 0, 1, 5, 10, ..., 95, 100
Résultats en utilisant la notification 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, 100Résultats en utilisant la notification 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
Niveaux de contrôle de la luminosité _BCL disponibles spécifiés comme 1, 5, 10, ..., 95, 100
Résultats en utilisant la notification ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY :
1, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100Résultats en utilisant la notification 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
Dans le dernier exemple, 1 est la dernière valeur disponible, donc le pilote règle le niveau de luminosité sur 1 bien qu’il soit inférieur à cinq unités de pourcentage par rapport à la valeur précédente de 5.
Un IHV ou OEM peut modifier le comportement par défaut du pilote de moniteur sur Windows Vista et Windows 7 en définissant une valeur DWORD pour MinimumStepPercentage dans la clé de registre suivante :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\monitor\Parameters\
Articles connexes
Prise en charge des sorties d'affichage et des événements ACPI