10.1.1 介绍
触摸屏驱动是从触摸屏硬件上获取用户的输入信息,然后将触摸事件传递给GWES子系统。驱动会矫正坐标值,比如将歪斜的线条修正为直线。
在用户的笔或者手指触摸屏幕的时候,驱动必须随时返回坐标值,当笔或者手指离开屏幕后,必须产生事件来标记“抬笔”事件。
10.1.2 注册表设置
下面是触摸屏驱动的注册表设置。
[HKEY_LOCAL_MACHINE\ControlPanel]
InputConfig"=dword:3; 3 => 键盘和触摸屏
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]
"DriverName"="touch.dll"
"MaxCalError"=dword:10
10.1.3 数据结构
1.TOUCH_PANEL_SAMPLE_FLAGS
本数据结构绘出返回到系统的坐标值的属性。
2.TPDC_CALIBRATION_POINT
本数据结构由TouchDriverCalibrationPointGet.例程代码组成,并运行在系统启动时,用户可以看见屏幕上会有一个X,从中间再到四周指引用户矫正坐标值。TouchDriverCalibrationPointGet例程通常利用屏幕的高和宽来确定中心和四周的坐标值。
struct TPDC_CALIBRATION_POINT {
INT PointNumber;
INT cDisplayWidth;
INT cDisplayHeight;
INT CalibrationX;
INT CalibrationY;
};
3.TPDC_SAMPLE_RATE
本数据结构由DdsiTouchPanelGetDeviceCaps例程代码组成。
struct TPDC_SAMPLE_RATE {
INT SamplesPerSecondLow;
INT SamplesPerSecondHigh;
INT CurrentSampleRateSetting;
};
数据结构中成员说明
SamplesPerSecondLow
低采样率值。
SamplesPerSecondHigh
高采样率值。
CurrentSampleRateSetting
当前采用的采样率值,1代表高采样率,0代表低采样率。
10.1.4 驱动例程
1.TouchPanelEnable
本例程使触摸屏具有采样功能。可以被程序直接调用。
2.DdsiTouchPanelAttach
本例程在MDD的DLL中被加载,DLL入口获得DLL_PROCESS_ATTACH事件时被执行。在多数系统中,一般只有一个进程加载触摸屏驱动,然而在某些系统中也不排除多个进程都加载触摸屏驱动DLL的可能性。在本例程中可以为它们复制全局变量等信息,这样可使每个加载驱动的进程都从本例程获得一个全局信息的副本。但是在本例程中不需要操作硬件或者中断。硬件和中断的操作应当在DdsiTouchPanelEnable和DdsiTouchPanelDisable中进行。
本例程原型:
LONG DdsiTouchPanelAttach(void);
返回值一般为0。
3.DdsiTouchPanelDetach
本例程在MDD的DLL被卸载,DLL入口获得DLL_PROCESS_DETACH事件时被执行。在多数系统中,一般只有一个进程加载触摸屏驱动,然而在某些系统中也不排除多个进程都加载触摸屏驱动DLL的可能性。在本例程中可以为它们复制全局变量等信息,这样可使每个加载驱动的进程都获得一个全局信息的副本。但是在本例程中不需要操作硬件或者中断。硬件和中断的操作应当在DdsiTouchPanelEnable和DdsiTouchPanelDisable中进行。
本例程原型:
LONG DdsiTouchPanelDetach(void);
4.DdsiTouchPanelDisable
本例程关闭触摸屏设备,删除任何没有被提交给GWES的坐标,关闭电源。
本例程原型:
VOID DdsiTouchPanelDisable(void);
无参数,无须返回值。
5.DdsiTouchPanelEnable
本例程原型:
BOOL DdsiTouchPanelEnable(void);
返回值:
TRUE代表成功,FALSE代表失败。
本例程为触摸屏加载电源,并且进行初始化。调用AllocTouchPanelRegs为寄存器分配内存。这些虚拟内存分配时,参数中使用MEM_RESERVED标志,这样被分配的内存不与物理内存绑定,不能被malloc等函数访问,最后使用virtual_copy将虚拟地址和寄存器的物理地址绑定(不是物理内存)。
在为寄存器分配完空间后,建立中断,即“落笔”中断,但是建立后就关闭中断,直到InterruptEnable()被执行后再建立中断。
6.DdsiTouchPanelGetDeviceCaps
本例程查询触摸屏设备的精度。
本例程原型:
BOOL DdsiTouchPanelGetDeviceCaps(
ULONG iIndex,
LPVOID lpOutput
);
其参数为:
iIndex,代表查询的项目。可以有以下类型:
TPDC_SAMPLE_RATE_ID 查询采样频率。
TPDC_CALIBRATION_POINT_ID 返回指定精度的坐标值,精度由lpOutput参数的PointNumber域指定。
TPDC_CALIBRATION_POINT_COUNT_ID 查询校准坐标所需要的坐标样本数。
lpOutput:指向存放返回信息的内存区域,类型和iIndex对应。
当iIndex为TPDC_SAMPLE_RATE_ID时,指向TPDC_SAMPLE_RATE结构。
当iIndex为TPDC_CALIBRATION_POINT_ID时,指向TPDC_CALIBRATION_POINT结构。
lpOutput不能为空指针。
返回值:
TRUE代表成功,FALSE代表失败。
7.DdsiTouchPanelGetPoint
本例程返回最近的一次数据采样坐标值。在“落笔”之后,就会触发定时器的一系列中断。定时器每秒钟约产生150次中断,每次中断都要返回坐标值。
在pxa255中,本例程分为三部分:
n 处理“落笔”中断
关闭“落笔”中断
n 处理定时器中断
递增定时器中断计数。
以上两个中断处理,都会调用SampleTouchScreen,从采集到的3个点中,选出最优化的点,返回给系统。
n 处理“抬笔”中断
最后,打开“落笔”中断,将UCB1400设置为可中断模式。
8.DdsiTouchPanelPowerHandler
本例程通知驱动程序,系统正从暂停模式恢复到正常模式,或者进行相反的操作。本例程会被内核态程序调用,因此不要在其中使用系统调用。
基于微软公司的DirectDraw显示驱动,必须在DDI内实现DDHAL用于支持DirectDraw。
10.2.1 Windows CE DirectDraw架构
DirectDraw提供了独立于设备的显示驱动功能。它将图形显示数据直接加载到硬件设备上,而不需要图形设备接口来对数据进行转换,从而使图形显示效果更加顺畅,避免了屏幕的闪烁。实现这样的接口,需要扩展能够直接访问硬件的驱动接口,这些能够直接访问硬件的驱动接口组成了DirectDraw硬件抽象层(DirectDraw Hardware Abstraction Layer,DDHAL)
Windows CE中的DirectDraw架构
图10-1 DirectDraw和GDI 显示驱动结合
|
图10-1显示了DirectDraw和GDI显示驱动是如何结合的:
Windows CE中的DirectDraw是Windows桌面环境Direct-
Draw的子集。DirectDraw的核心可执行代码常驻在系统进程gwes.exe中,而应用程序则和较小的客户端代理Ddraw.dll建立连接,这个代理负责维护系统和用户进程之间的远程DirectDraw COM接口连接。Windows CE在默认的情况下不提供进程外部的COM服务器。
Windows CE还提供了一个名为DirectDraw图形原始引擎(DirectDraw Graphics Primitive Engine,DDGPE)的抽象层,GDI和DirectDraw组件在系统进程中使用这个抽象层将GDI/DDI和DDRAW/DDHAL的功能捆绑到一个由C++类和函数组成的框架上。DDGPE提供的C++类实现了GPE类的扩展。
10.2.2 如何创建DirectDraw显示驱动程序
可以复制Platform Builder提供的样例显示驱动程序作为新创建的驱动程序的基础。
1.修改二进制文件导出的接口,二进制文件应当导出HALInit接口。在Platform Builder提供的样例显示驱动程序有一个.def后缀名的文件,在这个文件中添加HALInit。HALInit是Ddgpe.lib库的一部分,应当总是被链接到程序中。
2.在程序中包含路径drive:\wince400\public\directX\oak\inc,这应当是DDHFuncs.h所在路径。这是一个所有显示驱动程序公共的头文件,不应当被修改。
将下列文件从样例显示驱动程序中复制到自己的文件夹下:
n HalCaps.cpp
n HalDD.cpp
n HalSurf.cpp
n HalPalette.cpp
在选择样例显示驱动程序时,应当选择和自己设备最接近的驱动程序。最后,编译自己创建的驱动程序。
10.2.3 DDGPE基类
1.DDGPE类
DDGPE类是DirectDraw对象继承的基类。
表10-1列出了DDGPE类中的成员函数:
表10-1 DDGPE类中的成员函数
成 员
|
功 能 描 述
|
DDGPE::AllocSurface
|
为一个surface分配内存
|
DDGPE::AllocVideoSurface
|
在内存中创建DDGPESurf对象
|
DDGPE::BltExpanded
|
建立并且执行一个GPE blit
|
DDGPE::BltPrepare
|
GPE BltPrepare 函数的DDGPE版本
|
DDGPE::DetectMode
|
根据提供的参数确定显示模式
|
DDGPE::DetectPixelFormat
|
将DDPIXELFORMAT转换成EGPEFormat或者EDDGPEPixelFormat.
|
DDGPE::GetDriverData
|
返回指向驱动数据的指针
|
DDGPE::GetDriverGUID
|
获取驱动的GUID
|
DDGPE::GetModeInfoEx
|
返回扩展模式信息
|
DDGPE::GetPhysicalModeId
|
获取当前实际的显示模式
|
DDGPE::InDisplay
|
判断给定的扫描线是否正在显示
|
DDGPE::PerformBlt
|
执行一次blit
|
DDGPE::SetDriverData
|
将驱动特定的数据存储到DDGPE对象中
|
DDGPE::SetDriverGUID
|
将驱动的GUID赋予特定的对象
|
DDGPE::SetMode
|
更改当前的显示模式
|
DDGPE::SetVisibleSurface
|
使指定的surface被推到前台,成为可视
|
DDGPE::WrapSurface
|
在既存的内存块之上创建一个DDGPESurf对象
|
2.DDGPESurf类
DDGPESurf类扩展了GPESurf类,并且代表了由GDI分配的一个surface,如表10-2描述。
表10-2 DDGPSurf类中的成员函数
成 员
|
功 能 描 述
|
DDGPESurf::AlignedWidth
|
获取一个surface内存的宽度
|
DDGPESurf::Bpp
|
决定在当前surface中,每个象素占用的位数
|
DDGPESurf::ColorKey
|
获取当前surface的color key
|
DDGPESurf::ColorKeyMask
|
获取当前surface的color key掩码
|
DDGPESurf::DeleteSurface
|
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
Windows CE嵌入式开发入门-基于Xscale架构 培训教程
大概介绍了一下,wince驱动开发的分类1
WindowsCE嵌入式开发入门-基于Xscale架构
Windows CE嵌入式开发入门-基于Xscale架构,pdf版,缺第11章,比较全。
基于xscal架构 windows ce 嵌入式开发入门,有各种工具的使用及安装调试,是不错的入门东东
《ARM嵌入式技术原理与应用——基于XScale处理器及VxWorks操作系统 [单片机与嵌入式系统 ┈→ 嵌入式系统教程]》是《ARM嵌入式技术系列教程》的理论教程,以采用XScale处理器的CVTPXA270教学实验系统为硬件平台,...
ARM嵌入式技术原理与应用——基于XSCALE及VxWorks操作系统,这本书还不错,可以看看。。。。
IV实验丛书》之一,主要基于英蓓特公司目前最新嵌入式教学平台EduKit-IV,搭配核心Xscale PXA270板和其他相关模块,主要介绍嵌入式操作系统Windows CE6.0及其BSP包的开发,应用的开发等。 经历过近几年的嵌入式ARM...
基于Xscale270嵌入式Windows CE开发实验与实践
WINCE6.0基础教程和基于Xscale270嵌入式Windows CE开发实验与实践,适合想入门者或者刚入门不久者,也有一些有关GPRS,GPS,蓝牙的介绍。
基于XSCALE架构处理器WinCE系统BSP开发
基于XScale PXA270处理器平台Windows CE5.0系统的BSP二次开发
掌握Windows CE 6.0 开发平台的安装方法 安装Windows CE 6.0开发环境
基于Xscale处理器的嵌入式系统开发平台的设计与实现.pdf
◆Intel XScale架构与TIOMAP介绍 ◆嵌入式系统热门外设与接口标准 ◆嵌入式实时操作系统分析与选用技巧 ◆WinCE、EPOC、PalmOS、Linux等PDA OS深入探讨 ◆嵌入式系统软件开发技术要诀 ◆移动信息设备的产品介绍与...
基于XScale处理器的嵌入式视频解决方案.pdf
基于XScale-和Windows-CE-的智能公交报站器的设计与实现zuopin.doc
嵌入式系统:采用公开源代码和StrongARM_XScale处理器.pdf 毛德操继Linux源码情景分析后的又一力作。 高清带标签的pdf格式