Monitor Class Function Driver
每个显卡上的Video output连接的一个monitor表示为一个设备节点,这个节点为显卡设备的子设备节点。
典型地,设备栈中只有两个设备对象(video output, monitor)成对出现:物理设备对象(PDO)和功能设备对象(FDO)。有时,FDO之上也会有Filter 设备对象,其关联三方提供地filter 驱动,对于集成monitor,例如笔记本上内建flat panel,在PDO上就会有FDO,其关联着ACPI驱动。
下表显示了一个连接有一个monitor的video output的设备栈。
Device object | Required/Optional | Driver |
---|---|---|
Filter DO | Optional, typically not needed | monitor厂商提供的Filter驱动 |
FDO | Required | MSFT提供的monitor类function driver(Monitor.sys) |
Filter DO | Required only for integrated ACPI display panels | MSFT提供的ACPI驱动(Acpi.sys) |
PDO | Required | 显卡厂商提供的Bus driver(显示小端口驱动和端口驱动对) |
用户模式Application使用WMI来调用monitor类功能驱动的服务。这些服务包括暴露的monitor标识数据和设置(ACPI显示的情况下)显示亮度。
monitor保存设个标识和capability信息在EDID(Extended Display Identification Data)中,通过这种格式的信息让显示器给Host提供包含标识和capabilities的信息,这些信息独立于monitor和host通信的协议。从用户模式的application发送的读取monitor EDID的请求由monitor设备栈中的功能驱动处理(Monitor.sys)。当monitor功能驱动(Monitor.sys)收到获取monitorEDID的请求时,Monitor.sys会发送请求到作为Monitor设备栈底部的PDO,即显示端口和小端口驱动对。显示端口和小端口驱动对使用DDC(Display Data Channel)协议通过I²C总线读取Monitor的EDID数据,I²C bus是内建在标准monitor cable中的两条线组成简单的总线。
EDID能够通过 ACPI_METHOD_OUTPUT_DDC方法获取,其在Dispmprt.h中定义。集成的LCDs 要获得EDID这个方法是必须的,没有其他的标准机制来获取EDID数据。
更多关于显卡和Monitor通信的的信息参见如下主题:
I2C Bus and Child Devices of the Display Adapter
对于EDID结构和DDC协议,参见下面Video Electronics Standards Association(VESA)发布的标准
-
Enhanced Display Data Channel Standard (E-DDC)
-
Enhanced EDID Standard (E-EDID)
You can download these standards from vesa.org in the Free Standards section.
For details about the I²C bus, see the I²C Bus Specification published by Philips Semiconductors.