Поделиться через


Поддержка элементов управления яркостью на интегрированных панелях дисплея

Элементы управления яркостью реализуются в системном драйвере монитора (Monitor.sys). В Windows Vista и Windows 7 драйвер монитора:

  • Реализует интерфейс инструментария управления Windows (WMI), позволяющий приложениям (таким как ползунок яркости операционной системы) взаимодействовать с уровнем яркости.
  • Регистрируется в подсистеме политики питания устройства (DPPE), чтобы уровни яркости реагировали на изменения в политике питания.
  • Регистрируется с помощью интерфейса расширенной конфигурации и питания (ACPI) для обработки сочетаний клавиш яркости на основе ACPI. Для совместимости с моделью драйвера дисплея Windows 2000 драйвер монитора реализует элементы управления яркостью на основе IOCTL.

Драйвер минипорта дисплея или методы ACPI, предоставляемые базовой системой ввода-вывода (BIOS), могут поддерживать изменение яркости встроенной панели дисплея. Для первого целевого видео, который помечен как имеющий технологию вывода, которая подключается внутри компьютера (D3DKMDT_VOT_INTERNAL), драйвер монитора вызывает функцию DxgkDdiQueryInterface драйвера miniport дисплея, чтобы запросить оба следующих:

Если драйвер мини-порта дисплея не поддерживает по крайней мере интерфейс управления яркостью, драйвер монитора использует ACPI для запроса методов _BCL, _BCM и _BQC на дочернем устройстве. Дополнительные сведения об этих методах см. в спецификации ACPI на веб-сайте ACPI.

Примечание

В модели драйвера дисплея Windows (WDDM) идентификатор ACPI не используется для идентификации интегрированной панели отображения. Это отличается от модели драйвера дисплея Windows 2000, которая поддерживает только панели отображения с идентификатором 0x0110.

Если драйвер минипорта дисплея или методы ACPI, предоставляемые BIOS, поддерживают элементы управления яркостью, драйвер монитора регистрирует уведомления ACPI о сочетаниях клавиш яркости. Не существует альтернативного механизма, который бы сигнализировать драйверу монитора о уведомлениях о сочетании клавиш. Если драйвер монитора не может использовать ни один из механизмов управления яркостью или драйвер минипорта дисплея предоставляет интерфейс управления яркостью, но не вызывает функцию DxgkDdiGetPossibleBrightness , драйвер монитора не поддерживает элементы управления яркостью.

Уровни яркости

Уровни яркости представлены в виде однобайтовых значений в диапазоне от нуля до 100, где нуль отключен, а 100 — это максимальное значение яркости, которое поддерживает ноутбук. Каждый ноутбук должен сообщать о максимальном уровне яркости 100; однако для поддержки нулевого уровня ноутбук не требуется.

Единственное требование для значений от нуля до 100 заключается в том, что большие значения должны представлять более высокие уровни яркости. Приращение между уровнями не обязательно должно быть равномерным, и ноутбук может поддерживать любое количество различных значений до максимума 101 уровня. Необходимо решить, как сопоставить аппаратные уровни с диапазоном значений уровня яркости. Однако вызов функции DxgkDdiGetPossibleBrightness драйвера минипорта дисплея не должен сообщать больше значений уровня яркости, чем поддерживает оборудование.

Отключение автоматического изменения яркости в BIOS

Чтобы избежать проблем, которые могут возникнуть, если bios системы и драйвер монитора одновременно управляют яркостью панели дисплея, драйвер miniport дисплея должен задать бит 2 аргумента для метода _DOS. Дополнительные сведения о методе _DOS и его аргументах см. в спецификации ACPI. Установив бит 2, BIOS системы получает сообщение о том, что он не должен выполнять автоматическое изменение яркости.

Требования BIOS для поддержки элементов управления яркостью

Чтобы драйвер минипорта дисплея поддерживал оптимальное управление яркостью встроенной панели, BIOS системы должен предоставить следующие элементы через ACPI.

Методы управления яркостью

Встроенное устройство панели должно поддерживать методы управления яркостью ACPI (_BCL, _BCM и _BQC). _BCL и _BCM не изменяются с версии 1.0b спецификации ACPI; Их определения можно найти в спецификации ACPI 3.0 в разделах B.6.2 и B.6.3. _BQC является необязательным и определен в спецификации ACPI 3.0 раздела B.6.4. Определения уровней яркости см. в разделе Уровни яркости.

Ниже приведены псевдонимы для методов управления яркостью ACPI, определенных в Dispmprt.h:

  • ACPI_METHOD_OUTPUT_BCLÂ — позволяет Windows запрашивать список уровней яркости, поддерживаемых устройствами вывода дисплея. Этот метод является обязательным, если имеется встроенный ЖК-дисплей и поддерживает уровни яркости.
  • ACPI_METHOD_OUTPUT_BCMÂ — позволяет Windows задать уровень яркости устройства вывода дисплея. Windows будет устанавливать только уровни, указанные методом ACPI_METHOD_OUTPUT_BCL. При реализации метода ACPI_METHOD_OUTPUT_BCL требуется ACPI_METHOD_OUTPUT_BCM метод .

Отключение автоматического системного управления яркостью BIOS

BIOS системы должен поддерживать установку бита 2 аргумента для метода _DOS графического адаптера, чтобы разрешить автоматическое изменение яркости BIOS системы. Этот бит является дополнением к ранее определенным значениям для битов в этом методе. Дополнительные сведения об этом бите см. в разделе B.4.1 спецификации ACPI 3.0.

Если этот бит не поддерживается, драйвер монитора и BIOS системы могут изменять уровень яркости, что приводит к мерцание яркости. Кроме того, для яркости может быть задано значение, которое не является запрошенным пользователем.

ACPI_METHOD_DISPLAY_DOS, определенный в Dispmprt.h, является псевдонимом для метода автоматического управления яркостью ACPI. Этот псевдоним указывает, что BIOS системы может автоматически переключать активные выходные данные дисплея или управлять яркостью ЖК-дисплея. Его параметр может иметь одно из следующих значений.

Значение Значение
ACPI_ARG_ENABLE_AUTO_LCD_BRIGHTNESS BIOS системы должен автоматически контролировать уровень яркости ЖК-дисплея при изменении питания с переменного на dc.
ACPI_ARG_DISABLE_AUTO_LCD_BRIGHTNESS BIOS системы не должен автоматически управлять уровнем яркости ЖК-дисплея при изменении питания с переменного на dc.

Уведомления о сочетаниях клавиш яркости

Уведомления о сочетании клавиш яркости должны быть направлены на встроенное устройство панели дисплея, а не на графический адаптер.

Поддерживаются следующие уведомления, определенные в Dispmprt.h:

Уведомление Значение
ACPI_NOTIFY_CYCLE_BRIGHTNESS_HOTKEY Пользователь нажал горячую клавишу для цикличности яркости экрана.
ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY Пользователь нажал клавишу для увеличения яркости экрана.
ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY Пользователь нажал клавишу для уменьшения яркости экрана.
ACPI_NOTIFY_ZERO_BRIGHTNESS_HOTKEY Пользователь нажал горячую клавишу для уменьшения яркости экрана до нуля.

Эти уведомления о сочетаниях клавиш вошли в спецификацию ACPI 3.0 и описаны в разделе B.7. Как правило, ноутбук не поддерживает все уведомления о сочетании клавиш.

Для уведомлений ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY и ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY драйвер монитора по умолчанию увеличивает яркость по крайней мере на пять процентов (или уменьшает яркость по крайней мере на пять процентов меньше), чем предыдущий уровень яркости, пока не будет достигнут следующий доступный уровень шага (5, 10, 15, ..., 95, 100). Приращение или уменьшение с помощью сочетаний клавиш может создавать асимметричные шаблоны в уровнях яркости, как показано в следующих примерах.

  • Доступные _BCL уровней управления яркостью, заданных как 0, 1, 5, 10, ..., 95, 100

    • Результаты с помощью уведомления 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, 100

    • Результаты с помощью уведомления 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

  • Доступные _BCL уровней управления яркостью, заданных как 1, 5, 10, ..., 95, 100

    • Результаты с помощью уведомления ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY:
      1, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100

    • Результаты с помощью уведомления 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

    Во втором примере 1 является последним доступным значением, поэтому драйвер устанавливает уровень яркости 1, хотя он меньше чем на пять процентных единиц отличается от предыдущего значения 5.

IHV или OEM может изменить поведение драйвера монитора по умолчанию в Windows Vista и Windows 7, задав значение DWORD для MinimumStepPercentage в следующем разделе реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\monitor\Parameters\

Поддержка выходных данных отображения и событий ACPI