您的位置 首页 数字

技能干货:WinCE 7.0下的触摸屏驱动

技术干货:WinCE 7.0下的触摸屏驱动-在嵌入式系统中较为常用的是四线电阻式触摸屏,通过检测x轴和y轴的电压,来确定触点的位置。一般触摸屏系统结构为:触摸屏->触摸屏控制器->处理器。

  在嵌入式体系中较为常用的是四线电阻式触摸屏,经过检测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的第一个参数就不起作用,且第二个参数有必要设为一个有限值,这个值就决议来轮询的频率。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/173470.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部