Как получить доступ к зависимому устройству отображения 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. Он является внутренним для драйвера минипорта.

Другие вопросы по тегам