wince LCD 学习

  wince的显示驱动和普通的设备驱动不一样.普通的设备驱动是由设备管理器device.exe加载和管理的;而显示驱动是由GWES.exe加 载和管理的,类似的由GWES加载管理的还有键盘鼠标,触摸屏,打印机等驱动,这些叫本地驱动(内置驱动).所以,显示驱动ddi就不是常见设备驱动的 ddi(流接口ddi).更具体说,它不是通过CreateFile这些文件系统api接口来访问.而是通过GDI接口,熟悉win32应用编程的会记 起,GDI就是CreateDC,ReleaseDC等等这些api,可以在wingdi.h中找到这些接口.

    一般的,显示驱动是分层实现的,mdd层一般会使用微软提供的GPE模块.如果要支持旋转,使用GPErotate,如果要支持ddraw,使用DDGPE模块.

tips:GPE是什么?一个简单的图形引擎.首先这是一个类,其次从显示驱动分层上说,使用GPE作为上层mdd,可以节省工作,因为它处理了和上层的接口,并且软件方式模拟了一些图形功能.

 1. Display驱动模型

        WinCE下的Display驱动直接由GWES模块管理,它会直接被GWES模块管理和调用。Display驱动实际上也是分层的,其中包括GPE库,该库处理一些默认的绘图,相当于驱动的MDD层。用户只需要开发和硬件相关的PDD层驱动就可以了。

 

      如图,Application为一个应用程序,该程序会调用图形设备接口函数(GDI),而GDI函数是由Coredll.dll模块导出的。Coredll.dll会将函数调用的参数打包,然后触发对另一个进程的本地过程调用(LPC),所有的绘图和开窗口的工作被传给内核中GWES模块。GWES模块被称为图形,窗口和事件子系统,专门处理图形输出和用户输入等事件及相关的所有交互。GWES模块会调用Display驱动完成对显示硬件的操作。Display驱动由GPE和DDL.dll组成,GPE完成基本的默认绘图工作,而DDI.dll实际上从GPE类上继承而来的,并实现了相关的显示硬件的操作。

       2. DirectDraw Display驱动模型

       DirectDraw提供了独立于硬件的直接访问显示设备的能力。它可以通过直接访问硬件抽象层(HAL)中的一些函数来达到直接操作显示设备的目的,在这个过程中,不再需要图形设备接口(GDI)的转换。这种直接的方法可以使图像更加连贯,也提高了显示的性能。为了实现这样的功能,需要在显示驱动上扩展能够直接访问相关硬件的函数。这些函数会被DirectDraw模块调用,并形成DirectDraw的硬件抽象层(DDHAL)。 

       如图,DirectDraw的真正实现代码都驻留在gwes.dll模块中,应用程序只是连接了一个小的客户端,被称为DDRAW.dll代理,该代理主要负责用户进程与系统之间的远程DirectDraw COM接口连接。这样,用户请求会被传送到内核的GWES模块中。针对DirectDraw,WinCE提供了一个名为DirectDraw的GPE库(DDGPE),它是从GPE类上面继承而来的。实际上,DirectDraw显示驱动是由DDGPE和DDHAL组成,而DDGPE中已经包含了DDHAL的功能。用户需要从DDGPE类继承并实现相关函数即可。GWES.dll模块中包含GDI和DDRAW两个组件,这两个组件会调用驱动中的DDGPE的相关接口完成对硬件的操作。

        在上述两种架构中,用户可以根据自己的硬件情况选择相应的架构。第一种架构是基于GPE类继承来实现的,第二种架构是基于DDGPE类继承来实现的,而第二种架构的DDGPE类又是从第一种架构的GPE类继承而来。关于两种类的具体定义,可参见” \WINCE600\PUBLIC\COMMON\OAK\INC”路径下的gpe.h和ddgpe.h文件。

        本Blog将基于Display驱动模型来介绍,DirectDraw Display驱动模型不在这里介绍。

       WinCE下的Display驱动是基于GPE类来实现的,其中GPE中已经实现了基本的绘制工作,相当于MDD层。用户需要继承该类,并实现里面的其他一些函数,所以用户实现的相当于PDD层。

       GPE类是一个抽象类,其中包含很多纯虚函数,只能用于继承。用户在继承了GPE类以后,要对GPE类中的纯虚函数做相应的实现。开发Display驱动的大致步骤如下:

       (1)    继承GPE类并定义一个该类的实例。

       (2)    实现GetGPE()函数,把该类的实例返回给上层的DDI接口。

       (3)    实现DrvEnableDriver(..)和DisplayInit(..)函数并导出这两个接口。

       (4)    实现GPE类中的函数。

WinCE Display驱动程序开发

      GPE类是用户开发window ce的显示设备驱动程序工作的起点。

     window ce的显示设备驱动程序开发者只需要安要求设计实现一个GPE类的继承类,并且定义一个该类的实例将其指针传递给DDI各函数供它们实现自身的功能。这个GPE继承类的实例就是目标硬件平台的显示设备的软件抽象,它必须准确地反映特定显示设备的特性。wince显示设备驱动开发流程大致为:

   1.继承GPE类并定义一个该类的实例。

2.实现GetGPE()函数,把该类的实例返回给上层的DDI接口;

3.实现DrvEnableDriver(..)和DisplayInit(..)函数并导出这两个接口;

4.实现GPE类中的函数。



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值