Display Data Channel (DDC) — интерфейс обмена данными между компьютером и монитором. Существуют два варианта этого интерфейса:
- DDC 1 — односторонний, от монитора к компьютеру, передача данных о модели монитора и параметрах поддерживаемых видеорежимов.
- DDC 2 — двусторонний обмен данными.
Содержание
Стандарт VGA [ править | править код ]
ID2 (контакт 4) |
ID0 (контакт 11) |
ID1 (контакт 12) |
Тип монитора |
---|---|---|---|
n/c | n/c | n/c | нет присоединённого монитора |
n/c | n/c | GND | разрешение менее 1024×768 пикселей, монохромный |
n/c | GND | n/c | разрешение менее 1024×768 пикселей, цветной |
GND | GND | n/c | разрешение более или равно 1024×768 пикселей, цветной |
До опубликования и использования стандарта DDC в стандарте VGA было предусмотрено использование 4 контактов в стандартном аналоговом разъеме VGA для идентификации типа монитора. Комбинация заземлённых линий на этих 4 контактах служило информацией для видеокарты и операционной системе о допустимом формате видеоотображения монитором.
Эти контакты обозначались ID0, ID1, ID2, ID3 и имеют номера в аналоговом разъеме VGA 11, 12, 4, 15 соответственно. В некоторых мониторах и видеокартах линия ID3 (контакт 15) не используется.
В этом раннем стандарте тип монитора кодировался заземлением внутри монитора (GND) некоторой комбинации этих идентификационных линий, на плате видеоадаптера эти линии снабжены «подтягивающими» резисторами на линию питания +5V.
Наиболее популярная кодировка типа монитора посредством этих идентификационных линий приведена в таблице, n/c — контакт не присоединён.
В стандарте DDC2 для организации обмена данных по протоколу I 2 C используются линии ID1 (данные) и ID3 (синхронизация).
Стандарт VESA DDC/CI [ править | править код ]
VESA Display Data Channel Command Interface (DDC/CI). Этот стандарт описывает способ формирования и передачи команд в монитор и прием из него ответов. Набор общедоступных команд стандартизирован и описан в документе VESA Monitor Control Command Set (MCCS). Все эти документы конфиденциальны, однако, найти их возможно [1] [2] . Кроме того, есть и общедоступный документ, который называется «ACCESS.bus Specifications Version 3.0». В нём достаточно понятно описано устройство команд и способ их применения. При этом в операционной системе Windows есть сложность в том, что доступ к I²C шине монитора, который, собственно говоря, на сегодняшний день, является единственным устройством, поддерживающим эти стандарты, можно получить только через достаточно сложную надстройку Microsoft над драйвером видеокарты. В ОС Linux управление монитором возможно например через утилиту ddccontrol при помощи которой доступно чтение и изменение всех 255 регистров устройства.
Из широкодоступных готовых средств для работы с этим интерфейсом, поддерживающих основные языки программирования, есть продукт фирмы Nicomsoft, который называется WinI2C/DDC.
Аналогичная библиотека есть ещё и у фирмы EnTech Taiwan, и называется она softOSD, но, к сожалению, даже демоверсия этого продукта не доступна для загрузки.
С сайта EnTech Taiwan можно скачать приложение softMCC, которое, в свою очередь, может посылать команды DDC/CI.
Автор Ўрик задал вопрос в разделе Прочее компьютерное
Что такое DDC/CI на мониторе? Для чего эта функция? и получил лучший ответ
Ответ от Shurovik[гуру]
Данная функция позволяет компьютеру узнать монитор и список поддерживаемых им режимов.
Что мониторы умеют DDC, думаю, знают все. Традиционно, он используется X-сервером для определения параметров изображения, и админами, с помощью ddcprobe, для изучения «что не так сделал X-сервер» (ddcprobe показывает поддерживаемые монитором режимы по мнению самого монитора).
Однако, ddc — это двусторонний протокол. Он не только говорит компьютеру о том, что умеет монитор, но и монитору, о том, что хочет от него компьютер.
Windows-пользователи мониторов Samsung знают их magic tune, который позволяет выставлять яркость/контраст из (неудобной) программы. Однако, существует более интересный метод работы с монитором: это утилита ddccontrol.
C помощью этой утилиты можно:
- Изменять яркость, контрастность, гамму изображения. Причём, изменение яркости осуществляется изменением яркости подсветки! (разумеется, если монитор это физически умеет делать)
- Программно переключать пресеты (movie/text/user/game); это куда удобнее, чем тыкать соответствующую кнопку на самом мониторе
- Играться с недокументированными возможностями мониторов, например, вызывать заблокированные из меню языки и пункты настроек. На моём мониторе, например, мне удалось подвинуть картинку при работе по DVI (обычно этот пункт меню доступен только для VGA)
- Блокировать кнопки монитора (думаю, это не у всех моделей, но у самсунга точно можно). Блокируются все кнопки, кроме вкл/выкл, выключение/включение монитора эту блокировку сбрасывает.
- Включать и выключать монитор (полностью, без мигающей в standby лампочки)
Итак, вот несколько примеров использования утилиты:
Для начала грузим нужный модуль: modprobe i2c-dev
Дальше, ищем мониторы. (Их может быть больше одной штуки, правда?): ddccontrol -p
На «VESA standart monitor» можно не обращать внимания, это полноценный монитор, который просто отсутсвует в базе данных ddccontrol (это означает всего лишь, что вам придётся самостоятельно искать нужные атрибуты в регистрах). Все примеры я буду показывать именно на этом, «неизвестном» мониторе.
Основной принцип работы по DDC — у монитора есть регистры (от 0 до 255) с известными допустимыми значениями. Смысл этих регистров у каждого монитора свой, но некий общий набор обычно совпадает.
ddccprobe -d dev:/dev/i2c-2 — выводит все регистры монитора c подсказкой, если монитор известен ddccprobe.
(обратите внимание на префикс dev:).
ddccontrol -r 0xdc -w 2 dev:/dev/i2c-2 — выставление режима «интернет». -r 0xdc — регистр, куда писать, -w — команда писать и значение, которое писать. 0 — user mode, 5 — movie и т.д.
ddccontrol -r 0xf5 -w 1 dev:/dev/i2c-2 — блокировка меню (-w 0 — разблокировка).
А теперь немножко недокументированных возможностей:
ddccontrol -r 0xEE -w 55 dev:/dev/i2c-2 — сдвиг изображения
ddccontrol -r 0xCC -w 0 dev:/dev/i2c-2 — включить язык в меню. 0 — китайский 1 — японский, 2 — английский… 9 — русский. Любопытно, но через само меню выставить китайский или японский невозможно…
Как подсказывают в комментариях, выключение и включение монитора:
ddccontrol dev:/dev/i2c-2 -r 0xe1 -w 0 — выключить
ddccontrol dev:/dev/i2c-2 -r 0xe1 -w 1 — включить
Я уже давно думаю о встраивании этого функционала в видеоплеер (нажал фулскрин — включился movie), но руки не доходят…
PS У этой утилиты есть и гуёвая морда — gddccontrol