Поддержка элементов управления яркостью на интегрированных панелях дисплея
В этой статье описываются механизмы и требования для поддержки элементов управления яркостью на интегрированных панелях дисплея. В нем описывается совместная работа между системным драйвером монитора (Monitor.sys), драйверами минипорта в режиме ядра (KMD) и BIOS с помощью методов ACPI. Независимо от того, используется ли KMD или ACPI, цель заключается в том, чтобы пользователи могли легко настраивать яркость дисплея, повышая производительность вычислений при оптимизации энергопотребления.
Поддержка элементов управления яркостью в Monitor.sys
Элементы управления яркостью реализованы в Monitor.sys. Этот системный драйвер монитора обеспечивает следующую поддержку:
Реализует интерфейс инструментария управления Windows (WMI), позволяющий приложениям (например, ползунок яркости операционной системы) взаимодействовать с уровнем яркости.
Регистрируется в обработчике политики питания устройства (DPPE), чтобы уровни яркости реагировали на изменения в политике питания.
Регистрируется в расширенной конфигурации и интерфейсе управления питанием (ACPI) для обработки сочетаний клавиш яркости на основе ACPI. Для совместимости с устаревшей моделью драйвера отображения Windows 2000 драйвер монитора реализует элементы управления яркостью на основе IOCTL.
В режиме ядра мини-порт (KMD) или методы ACPI, предоставляемые BIOS, могут поддерживать изменение яркости встроенной панели отображения. Для первого целевого объекта видео, помеченного как технология вывода, которая подключается внутренне на компьютере (D3DKMDT_VOT_INTERNAL), драйвер монитора вызывает функцию KMD DxgkDdiQueryInterface для запроса обоих из следующих интерфейсов:
Интерфейс элемента управления яркостью. GUID_DEVINTERFACE_BRIGHTNESS и DXGK_BRIGHTNESS_INTERFACE_VERSION_1 определить этот интерфейс.
Интерфейс управления яркостью версии 2. GUID_DEVINTERFACE_BRIGHTNESS_2 и DXGK_BRIGHTNESS_INTERFACE_VERSION_2 определить этот интерфейс.
Если KMD не поддерживает по крайней мере интерфейс управления яркостью, драйвер монитора использует ACPI для запроса _BCL, _BCM и _BQC методов на дочернем устройстве. Дополнительные сведения об этих методах см. в спецификации ACPI на веб-сайте ACPI.
Примечание.
В модели драйвера windows (WDDM) идентификатор ACPI не используется для идентификации интегрированной панели отображения. Это отличается от модели драйвера отображения Windows 2000, которая поддерживает только панели отображения с идентификатором 0x0110.
Если методы ACPI, предоставляемые KMD или BIOS, поддерживают элементы управления яркостью, драйвер монитора регистрирует уведомления ACPI о сочетаниях клавиш яркости. Альтернативный механизм не существует, чтобы сигнализировать драйверу монитора о сочетаниях клавишных уведомлений. Если драйвер монитора не может использовать механизм управления яркостью или если KMD предоставляет интерфейс управления яркостью, но не вызывает функцию DxgkDdiGetPossibleBrightness , драйвер монитора не поддерживает элементы управления яркостью.
Уровни яркости
Уровни яркости представлены как однобайтовые значения в диапазоне от нуля до 100, где от нуля отключено, и 100 является максимальной яркостью, которую поддерживает ноутбук. Каждый ноутбук должен сообщать максимальный уровень яркости 100; однако для поддержки нулевого уровня не требуется ноутбук.
Единственным требованием для значений от нуля до 100 является то, что большие значения должны представлять более высокие уровни яркости. Приращение между уровнями не требуется однородным, а ноутбук может поддерживать любое количество различных значений до максимального числа уровней 101. Необходимо решить, как сопоставить уровни оборудования с диапазоном значений уровня яркости. Однако вызов функции DXGkDDDdiGetPossibleBrightness не должен сообщать больше значений уровня яркости, чем оборудование поддерживает.
Отключение автоматических изменений яркости bios
KMD должен задать бит 2 аргумента методу _DOS. Установка этого бита позволяет избежать проблем, которые могут возникнуть, если системный BIOS и монитор драйвера оба драйвера отображают яркость панели управления. Дополнительные сведения о методе _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 запрашивать список уровней яркости, поддерживаемых устройствами вывода дисплея. Этот метод требуется, если встроенный LCD-дисплей присутствует и поддерживает уровни яркости.
ACPI_METHOD_OUTPUT_BCM. Позволяет Windows задать уровень яркости выходного устройства дисплея. Windows задает только уровни, сообщаемые методом ACPI_METHOD_OUTPUT_BCL. Метод ACPI_METHOD_OUTPUT_BCM является обязательным, если реализован метод ACPI_METHOD_OUTPUT_BCL.
Отключение автоматического управления яркостью 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 должен автоматически контролировать уровень яркости LCD при изменении питания с AC на DC. |
ACPI_ARG_DISABLE_AUTO_LCD_BRIGHTNESS | Системный BIOS не должен автоматически контролировать уровень яркости LCD при изменении питания с AC на DC. |
Уведомления о сочетании клавиш яркости
Уведомления о сочетании клавиш яркости должны быть предназначены для устройства встроенной панели отображения, а не графического адаптера.
Следующие уведомления поддерживаются в dispmprt.h:
Notification | Значение |
---|---|
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 приращение яркости по крайней мере на пять процентов больше предыдущего уровня яркости до тех пор, пока не достигнут следующий доступный уровень шага (5, 10, 15, ..., 95, 100).
Для ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY, уменьшение яркости по крайней мере на пять процентов меньше предыдущего уровня яркости до достижения следующего доступного пятипроцентного уровня шага (100, 95, ..., 15, 10, 5).
Приращение или уменьшение с помощью сочетаний клавиш может создавать асимметричные шаблоны на уровнях яркости, как показано в следующих примерах.
Доступные _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\