http://blog.csdn.net/nanjianhui/article/details/2763979

WinCE中的Touch Panel驱动是由GWES模块来管理的,Touch Panel驱动接收用户的触摸信息,并将其转换为屏幕上的坐标信息,传给GWES模块。在WinCE中,Touch Panel驱动是分层的,分为MDD层和PDD层,这和其他WinCE设备驱动是一样的。MDD层由微软提供,用户只需要实现MDD和PDD层间的DDSI函数就可以了。如图

WinCE中的GWES模块负责加载和管理Touch Panel驱动,Touch Panel的MDD层向上提供DDI接口,PDD层是针对硬件的实现,对MDD层提供DDSI接口。

1 Touch Panel驱动中的数据结构

(1) TOUCH_PANEL_SAMPLE_FLAGS

用于描述一个采样点的信息,这些信息被定义在一个枚举结构中:

enum enumTouchPanelSampleFlags {

TouchSampleValidFlag = 0x01,

TouchSampleDownFlag = 0x02,

TouchSampleIsCalibratedFlag = 0x04,

TouchSamplePreviousDownFlag = 0x08,

TouchSampleIgnore = 0x10,

TouchSampleMouse = 0x40000000

};

TouchSampleValidFlag:一个有效的采样值

TouchSampleDownFlag:第一次按触摸屏时,返回该flag

TouchSampleIsCalibratedFlag:采样的x和y坐标值不需要再被校验了

TouchSamplePreviousDownFlag:表示上一次采样状态是按在触摸屏上

TouchSampleIgnore:忽略这次采样值

TouchSampleMouse:预留

(2) TPDC_CALIBRATION_POINT

用于描述一个校验点的相关信息,结构如下:

struct TPDC_CALIBRATION_POINT {

INT PointNumber;

INT cDisplayWidth;

INT cDisplayHeight;

INT CalibrationX;

INT CalibrationY;

};

PointNumber:校验点索引值,用于描述校验点在LCD上的位置

0:中间

1:左上

2:左下

3:右下

4:右上

cDisplayWidth:显示的宽度

cDisplayHeight:显示的高度

CalibrationX:校验点的x坐标值

CalibrationY:校验点的y坐标值

(3) TPDC_CALIBRATION_POINT_COUNT

用于描述需要校验的点的个数,结构如下:

struct TPDC_CALIBRATION_POINT_COUNT {

DDI_TOUCH_PANEL_CALIBRATION_FLAGS flags;

INT cCalibrationPoints;

};

flags:一般为0

cCalibrationPoints:需要校验的点的个数,一般是5

(4) gIntrTouch和gIntrTouchChanged

这是两个被MDD层用到的中断,需要在PDD层中定义,如下:

DWORD gIntrTouch        = SYSINTR_NOP;

DWORD gIntrTouchChanged = SYSINTR_NOP;

gIntrTouch用于描述触摸屏中断,要和硬件的触摸屏中断相关联。

gIntrTouchChanged用于在触摸屏按下后,每隔一段时间进行一次采样,应该和硬件的一个定时器中断相关联。

这两个值应该在DdsiTouchPanelEnable(..)函数中和硬件中断关联,并在函数DdsiTouchPanelGetPoint(..)中根据情况清除相应的中断。

2 MDD层API

MDD为上层导出所需的Touch Panel驱动接口函数,上层通过这些函数可以完成对Touch Panel的操作,下面会介绍这些函数的功能。

(1) BOOL TouchPanelEnable(PFN_TOUCH_PANEL_CALLBACK pfnCallback):

使能Touch Panel设备,用于初始化Touch Panel。

pfnCallback:指向处理Touch Panel事件的回调函数

(2) Void TouchPanelDisable(void):

禁用Touch Panel设备。

(3) BOOL TouchPanelGetDeviceCaps(INT iIndex, LPVOID lpOutput )

获得Touch Panel设备的相关信息。

iIndex:索引值

TPDC_SAMPLE_RATE_ID采样率信息

TPDC_CALIBRATION_POINT_COUNT_ID:采样点个数信息

TPDC_CALIBRATION_POINT_ID:采样点坐标信息

lpOutput:指向一个内存区域,用于存放获得的相关信息

(4) VOID TouchPanelCalibrateAPoint(INT32 UncalX, INT32 UncalY, INT32* pCalX, INT32* pCalY)

将输入的未经过校验的坐标信息转换成校验后的坐标信息。

UncalX:输入的X坐标

UncalY:输入的Y坐标

pCalX:校验后的X坐标

pCalY:校验后的Y坐标

(5) VOID TouchPanelPowerHandler(BOOL bOff)

Touch Panel的电源控制函数。

bOff:TRUE表示关闭电源,FALSE表示打开电源

(6) BOOL TouchPanelReadCalibrationPoint(INT* pRawX, INT* pRawY)

获得Touch Panel的坐标。

pRawX:触摸屏的X坐标

PRawY:触摸屏的Y坐标

(7) VOID TouchPanelReadCalibrationAbort(void)

终止当前的校验。

 

(8) VOID TouchPanelSetCalibration(INT32 cCalibrationPoints, INT32* pScreenXBuffer, INT32* pScreenYBuffer, INT32* pUncalXBuffer, INT32* pUncalYBuffer)

校验函数。通过一组实际的触摸屏上采集的点坐标和相应的屏幕坐标计算校验系数。具体公式如下:

Sx =  A1*Tx + B1*Ty + C1

Sy =  A2*Tx + B2*Ty + C2

这里就是通过显示屏坐标和采样的触摸屏坐标计算A1,B1,C1,A2,B2,C2。

cCalibrationPoints:校验点的个数

pScreenXBuffer:一组显示屏上的X坐标

               pScreenYBuffer:一组显示屏上的Y坐标

               pUncalXBuffer:一组触摸屏上采样的X坐标

               pUncalYBuffer:一组触摸屏上采样的Y坐标

(9) BOOL TouchPanelSetMode(INT iIndex, LPVOID lpInput)

设置Touch Panel的工作模式。

iIndex:索引模式

TPSM_SAMPLERATE_HIGH:设置高采样率

TPSM_SAMPLERATE_LOW:设置低采样率

TPSM_PRIORITY_HIGH_ID:设置触摸屏的IST为高优先级

TPSM_PRIORITY_NORMAL_ID:设置IST为正常优先级

lpInput:指向一块内存,其中包含相关信息。

3 PDD层API

(1) LONG DdsiTouchPanelAttach(void):

该函数在Touch Panel驱动的Dll被加载的时候调用

(2) LONG DdsiTouchPanelDettach(void):

该函数在Touch Panel驱动的Dll被卸载的时候调用

(3) BOOL DdsiTouchPanelEnable(void):

打开Touch Panel电源并做初始化。一般会在这里初始化一些信息,打开Touch Panel设备电源并做初始化。

(4) VOID DdsiTouchPanelDisable(void):

关闭Touch Panel设备。关闭Touch Panel电源并释放资源。

(5) BOOL DdsiTouchPanelGetDeviceCaps(ULONG iIndex, LPVOID lpOutput):

查询Touch Panel设备的相关信息

iIndex:查询的索引值

TPDC_SAMPLE_RATE_ID:查询采样率信息

TPDC_CALIBRATION_POINT_ID:查询需要校验的点的坐标

TPDC_CALIBRATION_POINT_COUNT_ID:查询用于校验的点的个数

lpOutput:根据iIndex值分别指向相关的信息

(6) void DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS pTipState, PLONG pUnCalX, PLONG pUnCalY):

获得Touch Panel上被按下的点的状态和坐标。

pTipState:当前触摸点的状态,比如无效点,有效点,被按下的点等。

pUnCalX:触摸点的X坐标

pUnCalY:触摸点的Y坐标

(7) VOID DdsiTouchPanelPowerHandler(BOOL bOff):

设置Touch Panel的电源状态。

bOff:TRUE表示关闭电源,FALSE表示打开电源

(8) BOOL DdsiTouchPanelSetMode(ULONG iIndex, LPVOID lpInput):

设置Touch Panel工作模式。

iIndex:模式索引

TPSM_SAMPLERATE_HIGH_ID:高采样率

TPSM_SAMPLERATE_LOW_ID:低采样率

lpInput:指向包含相关信息的内存

4 注册表设置

对于Touch Panel驱动来说,有些注册表项是需要配置的。具体如下:

InputConfig”:WinCE系统输入配置。

Bit0表示键盘输入

Bit1表示Touch Panel输入

Bit2表示硬件按键输入

DeviceName”:Touch Panel驱动的名字。

MaxCalError”:Touch Panel的精确度配置。

CalibrationData”:Touch Panel的校验值。第一次启动WinCE后,需要通过WinCE的触摸屏校验程序对Touch Panel进行校验。校验完成后,校验值会被写入注册表里面。

下面是关于Touch Panel的注册表配置的例子:

[HKEY_LOCAL_MACHINE/ControlPanel]

"InputConfig"=dword:3    ;3 => keybd and touch screen

[HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH]

"DriverName"="touch.dll"

"MaxCalError"=dword:8

"CalibrationData"="446,671 36,191 38,1179 856,1161 862,169 "

个人觉得,要想更好的理解Touch Panel驱动,还是需要去读读代码,基于WinCE6.0下,可以参考"/WINCE600/PLATFORM/H4SAMPLE/SRC/DRIVERS/TOUCH"下面的驱动,基于这个驱动开发自己的驱动会比较方便。

WinCE下Touch Panel驱动介绍 .相关推荐

  1. MTK 驱动(64)---Mtk touch panel驱动/TP驱动详解

    Mtk touch panel驱动/TP驱动详解 TP还算是比LCM好理解的多. 在启动过程中,先注册/mediatek/custom/command/kernel/touchpanel目录下的具体驱 ...

  2. wince下SD卡驱动开发

    WinCE 5.0下面SD卡驱动的开发.这是我做的第一个项目,当时做这个项目花费了相当的时间和精力,搞的我精疲力尽.几乎可以说当时对WinCE一点都不懂.也不知道从何处下手,就东看西看.东改西改,改的 ...

  3. 详解WinCE下USB Host驱动开发(2)

    当用户需要卸载USB Host设备驱动时,将会调用USBUnInstallDriver函数 BOOL USBUnInstallDriver();     它与USBInstallDriver类似,不过 ...

  4. linux CFI接口,高手进阶 Linux系统下MTD/CFI驱动介绍

    某些Intel的FLASH芯片(如StrataFlash系列)支持多分区,也就是各个分区可以同时进行操作.应该说这是不错的特性,但是也会带来些问题.记得当初移植Linux-2.4.21,挂JFFS2文 ...

  5. Wince下usb驱动详细总结(史无前例的详细)

    0,前言: 1, 本篇文章只讲wince下的usb host驱动,并深入解析HID驱动.本博客的目的并不是只是为了讲怎么写驱动, 更重要的是: 1,了解wince驱动的架构. 2,学习微软的写作方法, ...

  6. WINCE6.0+S3C6410下的DM9000A驱动

    ********************************LoongEmbedded************************ 作者:LoongEmbedded(kandi) 时间:201 ...

  7. WinCE平台USB摄像头驱动开发

    (转载)http://tech.e800.com.cn/articles/2009/116/1257487620781_1.html 由于良好的性能.低廉的价格和灵活方便的特性,USB 摄像头正被广泛 ...

  8. 浅谈WinCE平台USB摄像头驱动开发流程

    转自http://tech.e800.com.cn/articles/2009/116/1257487620781_1.html 由于良好的性能.低廉的价格和灵活方便的特性,USB 摄像头正被广泛的集 ...

  9. 【WinCE】SD card技术了解并WINCE下SDHC驱动开发(updated)

    SD Card Driver on ADS Summary 了解SD card. 1 WinCE 5.0下SD Stack. 6 Bus Driver 7 Host Controller Driver ...

  10. WinCE下光电编码器的驱动程序设计

    原文:http://article.ednchina.com/Embedded/20071209103917.htm 来源:中电网 | 作者:杨振坤 甘朝晖 蒋旻 引言 近年来,嵌入式技术发展迅速,嵌 ...

最新文章

  1. Tensorflow警告:our CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
  2. CStopwatch的C++实现
  3. .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
  4. @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  5. 【python练习】支付宝自动偷取能量
  6. 【Python】过滤数组中的空值(空字符串''和None)
  7. 企业如何寻找最合适的托管数据中心,以维持IT和业务的增长运营
  8. sublime_text 3 注册序列号
  9. netpref 使用_使用PrefView监测.NET程序性能(一):Event Trace for Windows
  10. LeetCode_database刷题记录(620. 有趣的电影)
  11. 移动端页面兼容性问题解决方案整理
  12. iOS定位服务CoreLocation
  13. linux显卡驱动安装在哪个文件夹,linux 下安装Nvidia显卡驱动
  14. 微信小店如何退货退款?
  15. 全自动共享软件破解器4.8
  16. DiskGenius 对 U 盘分区操作后保存更改时报错:保存分区表时出现错误20000011e no such partition
  17. CAD2014安装一整套流程
  18. filter_var函数缺陷(原理+实践)
  19. 我的原创漏洞CVE-2020-1066
  20. three.js中jsm文件夹的使用

热门文章

  1. 通达信标记符号_通达信在股票名称后自动标记
  2. xbox win10测试软件,UWP APP可通过Win10商店直接安装至XboxOne主机
  3. web网页设计期末课程大作业 简单的学生网页作业源码 基于HTML仿淘宝电商网站项目的设计与实现 企业网站制作
  4. FIT2CLOUD飞致云正式推出X-Lab孵化器,首期发布两款开源软件
  5. 精挑41款,好用到爆的谷歌浏览器插件,每位程序员日常编程必备
  6. Sublime Text安装与配置
  7. 屏幕坐标转换成threejs的坐标
  8. solaris系统的crontab定时任务
  9. java网页保存成pdf_将网页转换为PDF
  10. 实时数仓-数据采集层_1