说明:本文来自网络,但是没有署名作者,所以我也不知道是谁的,如果原作者看到,请通知我,我会给标明作者
触摸屏驱动开发
1.触摸屏驱动程序的模型
1.1 分层触摸屏驱动层序结构
本触摸屏驱动采用那个分层驱动程序结构,其驱动模型如下图所示,这种结构将驱动程序代码区分为上层模型设备驱动层(MDD),下层是依赖平台的驱动层(PDD)。其中MDD层通常无需修改就可以直接使用,改部分提供面向GWES的DDI的接口,而MDD通过指定的DDSI函数接口调用PDD,这就是我们通常驱动要实现的部分。PDD部分和MDD部分除了DDSI函数集接口外,还要实现一些指定的变量的定义或变量初始化动作(比如,gIntrTouch和gIntrTouchChanged在PDD层定义,但主要在MDD层使用。),也就是说MDD层和PDD层之间并不一定是以严格的分层模型来实现的,有时候也要通过共享变量的方式来完成交互。
1.2 DDI函数集(MDD层)
TouchPanelPowerHandler(BOOL boff)
Touch Screen的电源管理函数,boff:TRUE表示关闭电源,FALSE表示打开电源,其只是调用DdsiTouchPanelPowerHandler()函数,该函数在进入或退出poweroff状态时产生。
TouchPanelCalibrationAPoint()
该函数用于校准输入的触摸屏坐标,把触摸屏坐标转换为显示坐标,利用了公式Sx=A1*Tx+B1*Ty+C和Sy=A2*Tx+B2*Ty+C2。
TouchPanelReadCalibrationPoint()
在执行触摸屏校准程序时,用这个函数获得在当前校准点的十字形上点击的触摸屏坐标。
TouchPanelReadCalibrationAbord()
该函数在校准取消时被调用(在触摸屏校准程序运行过程中取消校准),仅仅设置状态位和事件后返回。
TouchPanelDisable()
禁用触摸屏(touch panel)设备,该函数关闭ISR,停止中断和注销事件及其他同步手段,此函数调用了DdsiTouchPanelDisable()函数。
TouchPanelEnable(PFN_TOUCH_PANEL_CALLBACK pfnCallback)
PfnCallback是指向处理touch panel事件的回调函数,该函数的执行动作:
⑴创建事件hTouchPanelEvent和hCalibrationSampleAvailable,其中当触笔按下或抬起,或者定时器中断时会触发hTouchPanelEvent事件,而在校准状态下当有校准数据输入时会触发hCalibrationSampleAvailable事件。
⑵初始化临界区,初始化所需的触摸屏中断gIntrTouch和gIntrTouchChanged,并且把它们关联到事件hTouchPanelEvent中。
⑶创建IST TouchPanelpISR,并设定其优先级。
TouchPanelSetCalibration()
该函数通过运行触摸屏校准程序时的校准动作获得显示坐标(Sx,Sy)和触笔在十字形上按下的触摸坐标(Tx,Ty)用于计算校准参数A1,B1,C1和A2,B2,C2。
TouchPanelGetDeviceCaps()
用于查询触摸屏设备支持的具体功能,通过DDSI函数查询相应的信息,当查询屏幕坐标信息时保存屏幕信息,供后面程序计算校准参数所用。
TouchPanelSetMode()
用于设置触摸屏的工作模式(采用低采样率还是高采样率),当设置IST优先级时直接通过内核API来完成,而直接将其他设置交给DdsiTouchPanelSetMode()函数来处理。
1.3 DDSI函数集(PDD层)
DdsiTouchPanelGetDeviceCaps(INT iIndex, L