wince7下的触摸屏驱动
来源:互联网 发布:网达软件千股千评 编辑:程序博客网 时间:2024/05/21 10:16
在嵌入式系统中较为常用的是四线电阻式触摸屏,通过检测x轴和y轴的电压,来确定触点的位置。一般触摸屏系统结构为:触摸屏->触摸屏控制器->处理器。
wince7下触摸屏的驱动分为PDD层(位于bsp目录中)和MDD层(位于public目录中)。PDD层和MDD层通过DDSI接口函数连接,MDD层和上层通过DDI函数连接。其中MDD层一般无需修改,我们只需修改PDD层的代码。
比如我的bsp目录下触摸屏驱动中的touchscreenpdd.cpp文件中主要有如下函数:
TchPdd_Init()
TchPdd_Ioctl()
PDDTouchIST()
PDDInitializeHardware()
PDDTouchPanelEnable()
PDDTouchPanelGetPoint()
PDDCalibrationThread()
PDDStartCalibrationThread()
PDDDeInitailzeHardware()
PDDTouchPanelDisable()
其中TchPdd开头的函数就是DDSI函数,PDD开头的函数就是PDD层的函数。MDD层会最先调用TchPdd_Init()函数,该函数会将DDSI函数以函数指针的形式传递给MDD层,并调用PDD层的函数进行必要的初始化,如调用PDDInitializeHardware()来初始化SPI,GPIO(我的触摸屏控制器使用SPI接口),调用PDDTouchPanelEnable()来创建“触摸屏事件”,创建IST线程等。
IST线程函数PDDTouchIST()中会有一个while循环,如下图所示:
循环中有一个WaitForSingleObject(,)函数。该函数有两个参数,第一个参数是“触摸屏事件”的句柄,第二个参数用来设置等待超时的时间。IST线程执行到这个函数会等待“触摸屏事件”发生或者超时。当这两种情况之一发生后,线程就会往下执行,并调用PDDTouchPanelGetPoint()函数来读取触点坐标。在“触摸屏事件”发生之前,超时时间会设置为无限等待。只有当“触摸屏事件”发生后(触点按下)才会开始读坐标,并判断是否还是按下状态,如果还是按下状态,那么就会设置超时时间为某一个有限值,这样当WaitForSingleObject等待时间超过这个值后又会去读取坐标。这种机制就能保证我们能读取到触点移动的轨迹。
当然要想使用“触摸屏事件”,必须要有一个触摸屏的中断(当触点按下,这个中断发生),并将这个中断和“触摸屏事件”关联起来,这样中断发生后,才会触发“触摸屏事件”。
还有一种方法:不使用中断,直接采用轮询方式来读取坐标,通过读取坐标值的合法性来决定是否有触点按下。这种方式下,WaitForSingleObject的第一个参数就不起作用,且第二个参数必须设为一个有限值,这个值就决定来轮询的频率。
- wince7下的触摸屏驱动
- Linux下的触摸屏驱动
- Linux下的触摸屏驱动
- Linux下的触摸屏驱动
- wince7下SD host驱动学习笔记
- WinCE7.0的驱动编写和加载
- 新建 WinCE7.0 下的 Silverlight 工程
- wince7下的串口信息打印函数
- 触摸屏驱动的问题。
- 触摸屏驱动的改写
- USB触摸屏的驱动
- Linux下触摸屏驱动移植
- Windows CE下触摸屏驱动实现的分析[转]
- Windows CE下触摸屏驱动实现的分析
- Windows CE下触摸屏驱动实现的分析
- wince下的触摸屏驱动分析(基于2410)
- 求救 关于WinCE下触摸屏驱动的问题
- linux下i2c接口的电容触摸屏驱动开发
- solr 3.5 配置及应用(三)
- C# LINQ
- 为什么程序员的工作效率跟工资不成比例!
- 1030. Travel Plan (30)
- 二分查找的思考
- wince7下的触摸屏驱动
- Go环境的搭建
- Solr 3.5 + Tomcat7 + mmseg4j + 搜狗词库 -配置并运行
- Linux内核态抢占机制分析
- 云集,让 web app 像 native app 那样运行(雄起吧,Web 开发者)
- 产品路书(一):产品狗的求职路
- 十五、从一个实例看数据封装和抽象
- 数据结构基础(11) --循环链表的设计与实现
- 简要介绍WPF