【转载】wince 显示驱动!
2008-11-25 10:55
204 查看
wince的显示驱动和普通的设备驱动不一样.普通的设备驱动是由设备管理器device.exe加载和管理的;而显示驱动是由GWES.exe加载和管理的,类似的由GWES加载管理的还有键盘鼠标,触摸屏,打印机等驱动,这些叫本地驱动(内置驱动).所以,显示驱动ddi就不是常见设备驱动的ddi(流接口ddi).更具体说,它不是通过CreateFile这些文件系统api接口来访问.而是通过GDI接口,熟悉win32应用编程的会记起,GDI就是CreateDC,ReleaseDC等等这些api,可以在wingdi.h中找到这些接口. 一般的,显示驱动是分层实现的,mdd层一般会使用微软提供的GPE模块.如果要支持旋转,使用GPErotate,如果要支持ddraw,使用DDGPE模块.事实上,对wince5,GPErotate已经合并到GPE里面了,typedef GPE[/u]GPErotate.而DDGPE也是从GPE继承过来的类.在一些驱动中ddraw和rotate是不能同时使用的.)[/u]tips:GPE是什么?一个简单的图形引擎.首先这是一个类,其次从显示驱动分层上说,使用GPE作为上层mdd,可以节省工作,因为它处理了和上层的接口,并且软件方式模拟了一些图形功能.
DrvBitBlt 有剪切和屏蔽的通常位块传送
DrvConstrostControl 允许软件、硬件对照调整
DrvCopyBits 发送GDI设计的打印段到打印驱动程序
DrvCreateDeviceBitmap 设计和管理位图
DrvDeleteDeviceBitmap 删除设计位图
DrvDisableDriver 通知驱动程序GDI不再需要它,并准备卸载它
DrvDisablePDEV 通知驱动程序GDI不再需要特殊打印或显示设备
DrvDisableSurface 通知驱动程序GDI不再需要特殊绘制表面
DrvEnableDriver 由驱动程序输出初始记录,为GDI的DDI函数返回指针
[/u]DrvEnablePDEV 为GDI返回一个PDEV,它是一个物理显示设备的逻辑表示
DrvEnableSurface 设计一个绘制界面,并把它与PDEV相连
DrvEndDoc 发送任何所需的完成打印文件控制信息
DrvFillPath 用毛刷填充路径
DrvGetMasks 为目前显示设备模式获取颜色屏蔽
DrvGetModes 列举、显示设备支持的显示模式
DrvMovePointer 移动指针,保证GDI不干涉
DrvPaint 用毛刷漆出一个特定区
DrvPowerHandler 调用处理、上电、掉电通知
//DrvAweryFont 获得字体公制信息
DrvRealizeBrush 创建由GDI指定参数毛刷
DrvRealizeColor 把一个RGB颜色,映射到由设备支持最可能获得颜色
DrvSetPalette 设置显示设备调色盘
DrvSetPointershape 对光标设置新形状并更新显示
DrvStareDoc 发送任意的开始打印文件信息
DrvStartPage 发送任意的打印新页的信息
DrvStrokePath 删除路径
DrvTransparentBlt 透明位块传送
DrvUnrealizeColor 将显示设备制式的颜色映成RGB值 但事实上,以上接口并非直接由显示驱动公开给GWES的.显示驱动只公开了一个接口DrvEnableDriver(),在这个接口中导出其他接口,具体的做法如下.BOOL
APIENTRY
GPEEnableDriver(
ULONG iEngineVersion,
ULONG cj,
DRVENABLEDATA * pded,
PENGCALLBACKS pEngCallbacks)BOOL APIENTRY DrvEnableDriver(
ULONG iEngineVersion,
ULONG cj,
DRVENABLEDATA *pded,
PENGCALLBACKS pEngCallbacks)
{
return GPEEnableDriver( iEngineVersion, cj, pded, pEngCallbacks );
}GWES调用DrvEnableDriver(),而DrvEnableDriver()函数调用上面的GPEEnableDriver函数,其中第三个参数就是返回的其他接口的函数指针.在ddi_if.c中同时定义了全局函数指针数组如下:const DRVENABLEDATA pDrvFn = {
{ DrvEnablePDEV },
{ DrvDisablePDEV },
省略 { NULL /* DrvEndDoc */ },
{ NULL /* DrvStartDoc */ },
{ NULL /* DrvStartPage */ },
{ DrvEscape }
}; 如此,上层获得下层的函数指针pded.即获得了所有接口函数的指针.此外,第4个参数pEngCallbacks是一个回调函数的指针入口,是上层提供给下层的回调函数.是系统提供给显示驱动调用的.它具体包括下面这些:(BRVSHOBJ 代表一个执行用实线或网格删除填充操作的毛刷.)BRVSHOBJ_pvAllocRbrush 为毛刷分配内存BRUSHOBJ_pvGetRbrush 为特定毛刷返回指针(CLIPOBJ 代表剪切区结构)CLIPOBJ-bEnum 从剪切区,列举剪切矩形的函数CLIPOBJ-cEnumStart 为列举剪切区的剪切矩形设置参数EngcreateDericeBitmap 使GDI对设备位图进行处理EngCreateDeviceBitmap 请求GDI创建一个位图,并返回句柄.EngCreateDeviceSurFace 通过GDI创建一个显示驱动程序管理的设备界面EngCreatePalette 请求GDI创建一个调色板.EngDeleteSurface 通知GDI显示驱动程序不再需要设备界面PALOBJ-cGetColors 将颜色复制到调色板上(PATHDAT 存储部分绘制路径的结构)PATHOBJ-bEenum 由绘制路径中列举PATHDATA记录PATHOBJ-vEnumStart 一个绘制路径列举它的线性部分PATHOBJ-vGetBounds 返回绘制路径的有限制矩形区(XLATEOBJ 用来在调色板之间传送色彩)XLATEOBJ-cGetPalette 由指定的调色盘返回颜色.
上层GDI接口
提供给GWES调用的接口一共大概20几个函数.GWES通过以下DDI和显示驱动交互,并向上提供GDI接口.DrvAnyBlt 有扩展或透明位块传送(bit block transfers)DrvBitBlt 有剪切和屏蔽的通常位块传送
DrvConstrostControl 允许软件、硬件对照调整
DrvCopyBits 发送GDI设计的打印段到打印驱动程序
DrvCreateDeviceBitmap 设计和管理位图
DrvDeleteDeviceBitmap 删除设计位图
DrvDisableDriver 通知驱动程序GDI不再需要它,并准备卸载它
DrvDisablePDEV 通知驱动程序GDI不再需要特殊打印或显示设备
DrvDisableSurface 通知驱动程序GDI不再需要特殊绘制表面
DrvEnableDriver 由驱动程序输出初始记录,为GDI的DDI函数返回指针
[/u]DrvEnablePDEV 为GDI返回一个PDEV,它是一个物理显示设备的逻辑表示
DrvEnableSurface 设计一个绘制界面,并把它与PDEV相连
DrvEndDoc 发送任何所需的完成打印文件控制信息
DrvFillPath 用毛刷填充路径
DrvGetMasks 为目前显示设备模式获取颜色屏蔽
DrvGetModes 列举、显示设备支持的显示模式
DrvMovePointer 移动指针,保证GDI不干涉
DrvPaint 用毛刷漆出一个特定区
DrvPowerHandler 调用处理、上电、掉电通知
//DrvAweryFont 获得字体公制信息
DrvRealizeBrush 创建由GDI指定参数毛刷
DrvRealizeColor 把一个RGB颜色,映射到由设备支持最可能获得颜色
DrvSetPalette 设置显示设备调色盘
DrvSetPointershape 对光标设置新形状并更新显示
DrvStareDoc 发送任意的开始打印文件信息
DrvStartPage 发送任意的打印新页的信息
DrvStrokePath 删除路径
DrvTransparentBlt 透明位块传送
DrvUnrealizeColor 将显示设备制式的颜色映成RGB值 但事实上,以上接口并非直接由显示驱动公开给GWES的.显示驱动只公开了一个接口DrvEnableDriver(),在这个接口中导出其他接口,具体的做法如下.BOOL
APIENTRY
GPEEnableDriver(
ULONG iEngineVersion,
ULONG cj,
DRVENABLEDATA * pded,
PENGCALLBACKS pEngCallbacks)BOOL APIENTRY DrvEnableDriver(
ULONG iEngineVersion,
ULONG cj,
DRVENABLEDATA *pded,
PENGCALLBACKS pEngCallbacks)
{
return GPEEnableDriver( iEngineVersion, cj, pded, pEngCallbacks );
}GWES调用DrvEnableDriver(),而DrvEnableDriver()函数调用上面的GPEEnableDriver函数,其中第三个参数就是返回的其他接口的函数指针.在ddi_if.c中同时定义了全局函数指针数组如下:const DRVENABLEDATA pDrvFn = {
{ DrvEnablePDEV },
{ DrvDisablePDEV },
省略 { NULL /* DrvEndDoc */ },
{ NULL /* DrvStartDoc */ },
{ NULL /* DrvStartPage */ },
{ DrvEscape }
}; 如此,上层获得下层的函数指针pded.即获得了所有接口函数的指针.此外,第4个参数pEngCallbacks是一个回调函数的指针入口,是上层提供给下层的回调函数.是系统提供给显示驱动调用的.它具体包括下面这些:(BRVSHOBJ 代表一个执行用实线或网格删除填充操作的毛刷.)BRVSHOBJ_pvAllocRbrush 为毛刷分配内存BRUSHOBJ_pvGetRbrush 为特定毛刷返回指针(CLIPOBJ 代表剪切区结构)CLIPOBJ-bEnum 从剪切区,列举剪切矩形的函数CLIPOBJ-cEnumStart 为列举剪切区的剪切矩形设置参数EngcreateDericeBitmap 使GDI对设备位图进行处理EngCreateDeviceBitmap 请求GDI创建一个位图,并返回句柄.EngCreateDeviceSurFace 通过GDI创建一个显示驱动程序管理的设备界面EngCreatePalette 请求GDI创建一个调色板.EngDeleteSurface 通知GDI显示驱动程序不再需要设备界面PALOBJ-cGetColors 将颜色复制到调色板上(PATHDAT 存储部分绘制路径的结构)PATHOBJ-bEenum 由绘制路径中列举PATHDATA记录PATHOBJ-vEnumStart 一个绘制路径列举它的线性部分PATHOBJ-vGetBounds 返回绘制路径的有限制矩形区(XLATEOBJ 用来在调色板之间传送色彩)XLATEOBJ-cGetPalette 由指定的调色盘返回颜色.
相关文章推荐
- WinCE显示驱动
- WinCE 流驱动一步一步来(转载)
- WinCE驱动开发问题精华集锦一(转载)
- WinCE显示驱动
- 如何学习wince驱动开发--转载(作者:gooogle man)
- VS2005 WINCE 流驱动开发流程 转载
- 如何为WinCE的定制键盘写驱动——转载
- WinCE 流驱动一步一步来(转载)
- 【转载】WinCE 流驱动
- WINCE显示驱动相关 -- DrvEscape和ExtEscape
- WinCE 流驱动一步一步来(转载)
- 【转载】WinCE 流驱动
- 开发WinCE显示驱动(英)
- VS2005 WINCE 简单的 流驱动 模板 转载
- WinCE中串口驱动及接口函数介绍(转载)
- 【转载】WINCE驱动开发之中断的使用
- wince注册表与驱动的加载(转载)
- WinCE下驱动开发入门记录 [转载]
- 如何为WinCE的定制键盘写驱动——转载
- WinCE下显示驱动分析