您现在的位置:新闻首页>潮流时尚

WinCE 7.0下的触摸屏驱动

2019-07-05 11:40编辑:admin人气:


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

(来源:未知)

织梦二维码生成器
已推荐
0
  • 凡本网注明"来源:的所有作品,版权均属于中,转载请必须注明中,http://www.wyzlyy.com。违反者本网将追究相关法律责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。






图说新闻

更多>>
工业自动化行业十大“最吃香”职业(上)

工业自动化行业十大“最吃香”职业(上)



返回首页