Как получить доступ к зависимому устройству отображения DDC/CI из приложения Windows?
Я модифицирую контроллер монитора для прототипа. Было бы удобно отправлять команды прототипу с использованием DDC/CI. В Windows я не могу найти очевидный способ отправки команды DDC / CI "зависимому от дисплея устройству".
API конфигурации монитора может отправлять команды виртуальной панели управления, но он не дает доступа к устройствам, зависящим от дисплея (которые имеют адрес I2C, отличный от 0x6e).
Похоже, что продукт Nicomsoft WinI2C / DDC предоставляет доступ к зависимому от дисплея устройству, но его срок службы истек. Я бы предпочел не строить зависимость от продукта с истекшим сроком эксплуатации.
NVIDI NVIDIA имеет I2C API, но я бы хотел решение, которое также работает с графическими адаптерами Intel и AMD.
1 ответ
Существует решение для окон, которые соответствуют модели отображения драйвера XDDM. Windows 8 и 10 используют WDDM.
В XDDM есть драйвер видеопорта для ОС Windows, а поставщик оборудования предоставляет драйвер минипорта. Когда вызов драйвера минипорта - это edid helper api драйвера видеопорта (VideoPortDDCMonitorHelper
), минипорт должен предоставить 4 указателя функции i2c в качестве аргументов.
Однако для использования этих интерфейсов вы должны действовать как драйвер видеопорта. Поэтому вам нужно написать драйвер нижнего фильтра видеопорта, который просто передает все интерфейсы от драйвера видеопорта, поставляемого с Windows, до драйвера минипорта. Подключите API и экспортируйте их в драйвер пользовательского режима или ioctl, который может вызвать приложение.
Может быть возможно просто смонтировать экземпляр драйвера минипорта и кое-как заставить его вызвать VideoPortDDCMonitorHelper
, Но без помощи фактического драйвера видеопорта было бы трудно получить руководство о том, как это сделать. Также у вас будет 2 экземпляра работающего драйвера, что может противоречить правилам для Windows.
Похоже, что это решение не работает для окон 8 и 10, потому что они используют другую модель драйвера дисплея, которая, по-видимому, не предоставляет низкоуровневое управление i2c. Он является внутренним для драйвера минипорта.