显示驱动程序和硬件

类别:VC语言 点击:0 评论:0 推荐:
               微软 Windows CE显示驱动程序和硬件

介绍

    Microsoft Windows CE操作系统的图形显示风格在版本2.0中有很大变化,在版本1.0中,图形设计界面(GDI)直接与显示硬件相接,在版本2.0中GDI与一个或更多显示驱动程序相连,它们反过来与显示硬件相连。这种显示技术使得Windows CE能使用各种不同的显示设备而无需对每个设备都有硬件代码程序,新的Windows CE GDI将小步骤与多用途结合起来。

    本论文首先考虑一个好的Windows CE显示驱动程序具有的特征,它讨论了显示驱动程序,应该执行的设备驱动程序界面功能,同样图形原始引擎级别,能用来简化写显示驱动程序,GDI支持设备驱动程序亦在讨论之列。

    本论文然后列举了Windows CE支持的每个像素深度的详细、显示缓冲格式,并讨论显示硬件,因为显示驱动程序是GDI与显示设备之间通道、显示驱动程序的硬件支持,也需支持GDI。

Windows CE显示驱动程序

    像Windows CE大多数一样,显示驱动程序界面(DDI)为微软Windows NT的DDI的子集合,如果你不熟悉Windows NT DDI,在写入你的Windows CE显示驱动程序前,应该阅读Windows NT设备驱动程序包的显示驱动程序部分。

    Windows CE仅使用Windows NT DDI中最基本的图形引擎和驱动程序函数.Windows CE和Windows NT的差别,有下述细节: Windows CE显示驱动程序总有相同功能,GDI并不查询驱动程序能力信息; Windows CE显示驱动程序并不拒绝复杂的操作,它调其回GDI,以使操作分成简单几步,因为所有Windows CE显示驱动程序支持相同功能,GD能够在首次调用显示驱动程序前分解复杂操作。 Windows CE显示驱动程序被编辑成动态链接库(.DLL文件)而不是库函数(.LIB文件)。

    所有Windows CE显示驱动程序必须执行一套DDI函数,它由.GDI调用初始化显示驱动程序和绘制以显示,除了DDI函数,这有一套VC++类,它调用图形初级引擎(GPE)类,显示驱动程序用它使硬件加速更容易,标准的显示驱动程序调用GPE类和加速是基于S3Trio64的显示硬件,如果你的显示硬件使用不同的视像芯片,你能够改变GPE调用方式以适合你的硬件能力。

    注意使用GPE类是可选择的,你能够不需它们而写入你的显示驱动程序,代价是使DDI函数的执行更加复杂,注意,由微软提供的GPE类需要你的显示硬件有一个flat 帧(frame)缓冲区,如果你的显示硬件没有,例如,它使用定制可移动窗口来连接整个显存,它可能不能使用GPE类,为获得更详细信息,参与本文中Windows CE显示硬件推荐部分,特别是Dirty Rec Drivers子部分。

    Windows CE显示驱动程序在许多方式上与通常的设备驱动程序不同,最主要不同是他们不暴露I/O接口。因此,他们不能被设备管理器管理,因此寄存器从来不能被它们调用。结果,这没有特别设备文件或其它文件系统记录,以与活动显示驱动程序相协调,显示驱动程序装载的机制是一个使用显示驱动程序的应用软件,调用带有显示驱动程序名的Create DC函数动态链接文件。这使Windows CE能装载显示驱动程序,并初始化以使设备上下文能够返回调用应用默认的显示驱动程序,当然是自动加载。


DDI函数


    下面表格列举了显示和打印驱动程序的DDI函数显示驱动程序,应执行此处列举的全部显示DDI函数。打印驱动程序则应执行全部的打印DDI函数。然而,仅有Drve Enable Drive必须由显示驱动程序的动态链接库(DLL)输出。所以,仅有DrvEnableDrive必须有名称,其它函数可随意调用,因为他们由Drr Enable Driver返回的,函数指针输出到GDI,无论谁被调用,总是跟随定义在Win DDI.H文件中的原型。

函数 用途 DrvAnyBlt 有扩展或透明位块传送 DrvBitPlt 有剪切和屏蔽的通常位块传送 Drv ConstrostControl 允许软件、硬件对照调整 DrvCopyBits 发送GDI设计的打印段到打印驱动程序 DrvCreateDeviceBitmap 设计和管理位图 DrvDeleteDeviceBitmap 删除设计位图 DrvDisableDriver 通知驱动程序GDI不再需要它,并准备卸载它 DrvDisableP.D.Ev. 通知驱动程序GDI不再需要特殊打印或显示设备 DrvDisableSwrface 通知驱动程序GDI不再需要特殊绘制表面 DrvEnableDriver 由驱动程序输出初始记录,为GDI的DDI函数返回指针 DrvEnablePDEv 为GDI返回一个PDEV,它是一个物理显示设备的逻辑表示 DrvEnablesface 设计一个绘制界面,并把它与PDEV相连 DrvEmdDoc 发送任何所需的完成打印文件控制信息 DrvFillpath 用毛刷填充路径 DrvGetMask 为目前显示设备模式获取颜色屏蔽 DrvGetMode 列举、显示设备支持的显示模式 DrvMorePointer 移动指针,保证GDI不干涉 DrvPaint 用毛刷漆出一个特定区 DrvPowerHandler 调用处理、上电、掉电通知 DrvAweryFont 获得字体公制信息 DrvRealizeBrush 创建由GDI指定参数毛刷 DrvReamoceColor 把一个RGB颜色,映射到由设备支持最可能获得颜色 DrvSeepalette 设置显示设备调色盘 DrvSeepointershape 对光标设置新形状并更新显示 DrvStareDoc 发送任意的开始打印文件信息 Drvstartpage 发送任意的打印新页的信息 DrvshokePath 删除路径 DrvtransparentBrt 透明位块传送 Drvunrealizecolor 将显示设备制式的颜色映成RGB值


使用GPE类

    标准显示驱动程序使用图形引擎工程(GPE)类,当GPE类可选择时,使用它们可很容易处理写入显示驱动程序,如果你使用GPE类,你仅需提供所需新代码,来使显示硬件功能正常操作加速。

    GPE类需要你的显示硬件使用一个flat frame缓冲区,也就是显存必须位于一个邻近的内存范围,修正GPE类来使用一个非连续frame buffer将很费力气。

    为创建一个基于GPE类显示驱动程序,用下述步骤: 为项目设一子目录; 由标准驱动目录,例如S3Trio64目录复制文件到你的项目目录; 全面更改文件中设定设备名,例如将“S3Trio64”改为你的设备名; 更改config.cpp以使它把你的显示设备,放在一个线性frame-buffer模式; 使指定硬件加速失效; 建立并测试这些非加速驱动程序GPE,将用软件产生输出; 加入你的硬件加速模式。


GDI提供的支持显示驱动程序服务

    Windows CE GDI以预先定义函数结构和一些独立C函数形式,提供服务支持显示驱动程序,预定制结构提供毛刷、剪切区、调色板、删除和填充路径、转化的支持、独立的C函数提供设备位图和界面支持。

函数结构 用途 BRVSHOBJ 代表一个执行用实线或网格删除填充操作的毛刷 BRVSHOBJ_PVALLOCRbrush 为毛刷分配内存 BRUSHOBJ_PVGeeRbrush 为特定毛刷返回指针 CLIPOBJ 代表剪切区结构 CLIPOBJ-BESUM 从剪切区,列举剪切矩形的函数 CLIPOBJ-CenumStart 为列举剪切区的剪切矩形设置参数 EngcreateDericeBitmap 使GDI对设备位图进行处理 EngcreatedeviceSurFace 通过GDI创建一个显示驱动程序管理的设备界面 EngDeleteSurface 通知GDI显示驱动程序不再需要设备界面 PALOBJ-C GetColors 将颜色复制到调色板上 PATHDAT 存储部分绘制路径的结构 PATHOBJ-Benum 由绘制路径中列举PATHDATA记录 PATHOBJ-VenumStart 一个绘制路径列举它的线性部分 PATHOBJ-V GetBoints 返回绘制路径的有限制矩形区 XLATEOBJ 用来在调色板之间传送色彩 XLATEOBJ-C GET PALETTE 由指定的调色盘返回颜色


显示缓冲格式

    Windows CE GDI支持广泛的色彩深度和色彩模式,由一色到可调的真32位RGB,每个格式也支持几个像素序,这依靠于显示是否是1位、2位或4位的。

    所有的显示缓冲格式,假定了显示像素顺序从左到右、从上到下,即像素(0,0)在左上角像素(Wisth-1,height-1)在右下角。

1像素位格式

    它为简单的黑白显示,0代表黑,1代表白。像素被以字节形式存储,这样像素(0,0)被放在显示内存第一个字节最高位。

2像素位格式

    虽然任何4-entry调色板都可工作,但两象素位格式是典型地用于作为4级灰度显示,灰度级由下列表表示:

1位 0位 灰度级别 0 0 黑 0 1 灰 1 0 亮灰 1 1 白

4像素位格式

    它通常是可调色格式,frame buffer可以2像素/一字节或1像素/一字节形式。

如果你选择,一个像素/字节方式执行,驱动程序将以16色调色板的8位/像素的显示模式,每个字节中相关位为低位字节,高位字节全为0。


8像素位格式

    它是可用软件控制调色板的制式,它把八位值映射成24位色。

    由于运行、兼容性、图像质量原因,微软推荐使用含有默认Windows CE调色板。


15或16像素位格式


    它是屏蔽格式,不可调色。对15或16位像素像素以每两字节存储,15像素位,浪费了每个字最高位,微软推荐纯红、绿、蓝的匹配如下:

颜色 15位(5-5-5RGB) 16位(5-6-5RGB) Red 0x7C00 0xF800 Green 0x3E00 0x07E0 Blue 0x001F 0x001F

在15位/像素匹配符中,每个命令的低15位包含像素数据,不用位为0。


24位/像素格式

    它是真彩格式,每个像素对红、绿、蓝各存储8位,此种格式有其优点和不足,优点是图像质量好,因为每个像素占3字节,他们不浪费内存,不足之处是既然设计中像素一半穿越字符边界,在联连和解码像素时将引起操作后果。


32位/像素格式

    它是另一种真彩格式,这种格式将不会使像素超过Dword边界,但内存利用效率不高,它有两种方式安排色彩通道,一个是蓝色作为每个像素中最弱作用字节,另一种是将红色作为最弱作用字节,与之相应为PAL-BGR和PAL-RGB模式,在每个像素中你能抽取红、绿、蓝的下列匹配符合通道。

Color PAL_RGB Mask PAL_BGR Mask Red 0x000000FF 0x00FF0000 Green 0x0000FF00 0x0000FF00 Blue 0x00FF0000 0x000000FF


Windows CE显示硬件推荐

    微软公司推荐使用10种Windows CE操作系统的显示硬件,这些硬件被证明是可操作的,并使你的显示驱动程序开发变得更容易,即使你的硬件不是所推荐的,你仍能写入一个完全功能的显示,驱动程序,或如果它在产品设计后期难以更改硬件设计,代价是在驱动程序和/或减少操作上附加努力。

内存布局

    微软强烈推荐你显示硬件使用线性frame缓冲区,你能够向缓冲区读和写操作。所有的显示器内存应该是连续、适合的,此外,应是一个线性联接窗口覆盖整个frame缓冲区,使用非微软所推荐的硬件时,如果你选择使用它,就需要对GPE类进实质性改动,详细信息参见本论文的使用GPE类部门。

    你的显示硬件也要使用可支持的像素格式,存储和像素序组合、详细信息,阅读本论文的,显示缓存格式部分。这种显示硬件frame缓冲应有如下性质: 由上至下格式,像素(0,0)在左上角,像素(width-1,height-1)在右下方; frame缓冲区,内存中用来代表显示中的一个扫描行的字节数,应该是一组四字节,甚至用未用字节来填充每个扫描行末端; 整个frame缓冲区必须与CPU可连接,而不用CPU运行空白选择. Frame缓冲区:不使用bit-planes,它的每个色彩通道或暗度都有分离frame缓冲区。

Dirty Rect缓冲区

    如果你希望使用GPE类来执行显示驱动程序,但你的显示硬件没有被支持GPE类(例如,如果frame缓冲区非线性),然后你可能考虑写“dirty rece driver”。

    在这个模式,GPE类维持一个内存中独于设备的位图(DIB),它代表frame缓冲区,当内存的DIB被修改时,GPE将通知dirty rect driver,以复制DIB更改的或“dirty"部分到,显示设备进行转换操作。

    Direy rect drivers以占用内存和牺牲运行速度为代价,他们仅应做为支持硬件的最后手段,当这些硬件不能满足GPE需求。

加速

    微软推荐你使用能加速下列操作的显示硬件,按重要性排列如下: 实色填充,特别的Bit操作,它的pb0-isolid color数不是OXFFFFFFF。 SRCCOPY Bit操作; 光标显示,如果你的平台使用光标; 用子像素绘制实线; 匹配SRCCOPY Bit操作; 其它的由Windows CE设备执行图像操作。


总结

    在Windows CE 2.0中,显示驱动程序在可视化显示技术中发生关键性作用,与本论文中提到的设计策略相协调的,显示驱动程序和显示硬件将允许基于Windows CE的设备充分利用新GDI的增强图像显示能力。

本文地址:http://com.8s8s.com/it/it3868.htm