2014-12-19 303 views
3

我正在修改原型的监视器控制器。使用DDC/CI将命令发送到原型会很方便。在Windows中,我无法找到将DDC/CI命令发送到“显示相关设备”的明显方法。如何从Windows应用程序访问DDC/CI显示器相关设备?

Monitor Configuration API可以发送虚拟控制面板命令,但它不允许访问显示相关设备(其具有非0x6e的I2C地址)。

Nicomsoft的WinI2C/DDC产品似乎可以访问依赖于显示器的设备,但它是报废的。我不希望建立对生命周期结束产品的依赖。

NVIDIA的NVAPI有一个I2C API,但我想要一个同样适用于Intel和AMD图形适配器的解决方案。

回答

1

解决方案存在Windows尊重XDDM驱动程序显示模型。 Windows 8和10使用WDDM。

在XDDM中有一个窗口O.S.提供的视频端口驱动程序,硬件供应商提供微型端口驱动程序。当微型端口驱动程序调用视频端口驱动程序的edid帮助程序API(VideoPortDDCMonitorHelper)时,微型端口必须提供4个i2c函数指针作为参数。

但是,为了利用这些接口,您必须充当视频端口驱动程序。所以你必须编写一个视频端口较低的过滤器驱动程序,它将所有从Windows提供的视频端口驱动程序的接口传递到微端口驱动程序。钩住api并将它们导出到应用程序可以调用的用户模式驱动程序或ioctl中。

它可能简单地安装微型端口驱动程序的实例,以及如何让它调用VideoPortDDCMonitorHelper。但是,如果没有实际的视频端口驱动程序的帮助,就很难获得关于如何做到这一点的指导。此外,您将有2个驱动程序实例可能违反Windows规则。

它没有出现这个解决方案适用于Windows 8和10,因为它们使用不同的显示驱动程序模型,似乎并没有公开低层次的i2c控制。它是微型端口驱动程序的内部。

+1

以下是过滤器驱动程序必须注册的函数列表https://msdn.microsoft.com/en-us/library/windows/hardware/ff566464(v=vs.85).aspx。您必须模仿视频微型端口驱动程序,将所有内容传递给驱动程序对之间。 –

+0

谢谢您让我知道一个XDDM视频端口过滤器驱动程序可以解决问题。 – joshuanapoli

+0

我认为一个解决方案也存在,使用WDDM更容易,但有一个小问题。你不能获得数据和时钟线的低级别访问,而只需发送一个缓冲区。然而,根据msdn的显示,微型端口驱动程序被允许拒绝对edid地址以外的i2c地址的请求。因此,虽然跨平台的驱动程序可能是可能的,但窗口并未强制提供这种支持,而是留给了oem。 –

相关问题