Windows CE 触摸屏(TouchPanel)驱动简析(1)-原理及驱动架构(基于WinCE5.0 SMDK2410 BSP的TouchPanel驱动)

之前的文章http://blog.csdn.net/shevsten/archive/2010/01/14/5188898.aspx介绍了如何获得触摸屏坐标,设置注册表,将CSP下的Touch搬运到BSP目录下等移植应用工作.现在我们来具体分析下WinCE下触摸屏驱动是如何实现的.
1.首先简单介绍下触摸屏的原理.从网上搜集了一些资料:
很多LCD模块都采用了电阻式触摸屏,这些触摸屏等效于将物理位置转换为代表X、Y坐标的电压值的传感器。通常有4线、5线、7线和8线触摸屏来实现.我们这里的就是4线式触摸屏.
电阻式触摸屏是一种传感器,它将矩形区域中触摸点(X,Y)的物理位置转换为代表X坐标和Y坐标的电压。很多LCD模块都采用了电阻式触摸屏,这种屏幕可以用四线、五线、七线或八线来产生屏幕偏置电压,同时读回触摸点的电压。

触摸屏原理Windows CE 触摸屏(TouchPanel)驱动简析(1)-原理及驱动架构(基于WinCE5.0 SMDK2410 BSP的TouchPanel驱动)_第1张图片

 

触摸屏包含上下叠合的两个透明层,四线和八线触摸屏由两层具有相同表面电阻的透明阻性材料组成,五线和七线触摸屏由一个阻性层和一个导电层组成,通常还要用一种弹性材料来将两层隔开。当触摸屏表面受到的压力(如通过笔尖或手指进行按压)足够大时,顶层与底层之间会产生接触。所有的电阻式触摸屏都采用分压器原理来产生代表X坐标和Y坐标的电压。如图3所示,分压器是通过将两个电阻进行串联来实现的。上面的电阻(R1)连接正参考电压(VREF),下面的电阻(R2)接地。两个电阻连接点处的电压测量值与下面那个电阻的阻值成正比。

 

为了在电阻式触摸屏上的特定方向测量一个坐标,需要对一个阻性层进行偏置:将它的一边接VREF,另一边接地。同时,将未偏置的那一层连接到一个ADC的高阻抗输入端。当触摸屏上的压力足够大,使两层之间发生接触时,电阻性表面被分隔为两个电阻。它们的阻值与触摸点到偏置边缘的距离成正比。触摸点与接地边之间的电阻相当于分压器中下面的那个电阻。因此,在未偏置层上测得的电压与触摸点到接地边之间的距离成正比。

 

四线触摸屏

 

四线触摸屏包含两个阻性层。其中一层在屏幕的左右边缘各有一条垂直总线,另一层在屏幕的底部和顶部各有一条水平总线,见图4。为了在X轴方向进行测量,将左侧总线偏置为0V,右侧总线偏置为VREF。将顶部或底部总线连接到ADC,当顶层和底层相接触时即可作一次测量。

 

为了在Y轴方向进行测量,将顶部总线偏置为VREF,底部总线偏置为0V。将ADC输入端接左侧总线或右侧总线,当顶层与底层相接触时即可对电压进行测量。图5显示了四线触摸屏在两层相接触时的简化模型。对于四线触摸屏,最理想的连接方法是将偏置为VREF的总线接ADC的正参考输入端,并将设置为0V的总线接ADC的负参考输入端。



Windows CE 触摸屏(TouchPanel)驱动简析(1)-原理及驱动架构(基于WinCE5.0 SMDK2410 BSP的TouchPanel驱动)_第2张图片
Windows CE 触摸屏(TouchPanel)驱动简析(1)-原理及驱动架构(基于WinCE5.0 SMDK2410 BSP的TouchPanel驱动)_第3张图片

2.GEC2410触摸屏原理图
Windows CE 触摸屏(TouchPanel)驱动简析(1)-原理及驱动架构(基于WinCE5.0 SMDK2410 BSP的TouchPanel驱动)_第4张图片
触摸屏的四线TSXP,TSXM,TSYP,TSYM分别连接CPU的AIN7&nXPON,XMON,AIN5&nXPON,YMON
AIN7和AIN5连接的是CPU的ADC控制器引脚,其余的对应CPU的Touch Screen控制器引脚.

3.Windows CE触摸屏驱动架构
触摸屏驱动从硬件读取用户输入,然后转换成一个触摸事件发送给GWES.同时将为计算的坐标转换为校准坐标.校准坐标对硬件异常,如触摸倾斜,非线性顺序做了补偿运算.
触摸屏驱动正常工作时,当用户用触摸行为时需要提供该触摸点.当触摸结束时驱动必须提交至少一个事件以通知系统触摸笔已移除.
开发人员可以使用以下步骤来进行对触摸屏进行采样和校准:
(1) 调用TouchPanelEnable开始屏幕采样
(2) 调用TouchPanelGetDeviceCaps来获取采样点数目
(3) 对于每个校准点,进行以下步骤
    a. 调用TouchPanelGetDeviceCaps来获得一个校准坐标
    b. 在返回坐标画一个交叉线
    c. 调用TouchPanelReadCalibrationPoint来获得校准点数据
(4) 调用TouchPanelSetCalibration来计算校准系数.
当驱动执行完以上顺序后,任何采样数据被传递给TouchPanelEnable定义的回调函数.驱动可以传递校准好的坐标也可以传递未校准的坐标给回调函数.如果驱动有有效的校准算法,可以返回校准好的坐标.如果算法复杂,可以返回未校准坐标以避免在高优先级的驱动线程中进行计算,而是交由较低优先级的驱动回调函数来进行计算.
我们实际上是在应用程序中调用TouchCalibrate来完成触摸屏校准的.

source文件里引用了两个库tch_cal.lib和tchmdd.lib.
SOURCELIBS= /
 $(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/tch_cal.lib /
 $(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/tchmdd.lib /
tch_cal.lib(/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/TOUCH/TCH_CAL)实现了触摸屏的校准算法.下表中的ErrorAnalysis,TouchPanelSetCalibration,TouchPanelCalibrateAPoint在此库中实现
tchmdd.lib(/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/TOUCH/TCHMAIN/tchmain.c),实现了其他的touch screen driver functions.
这两个库实际上就是触摸屏的MDD层驱动.

Programming element

Description

ErrorAnalysis

This function provides information on the accuracy of the touch screen calibration.

TouchCalibrate

This function starts the touch screen calibration sequence.

TouchPanelCalibrateAPoint

This function converts noncalibrated points to calibrated points.

TouchPanelDisable

This function disables the touch screen.

TouchPanelEnable

This function enables and re-enables the touch screen.

TouchPanelGetDeviceCaps

This function returns information about the capabilities of the touch screen.

TouchPanelInitializeCursor

This function provides an opportunity for touch drivers to move the cursor at initialization time.

TouchPanelPowerHandler

This function handles power-state change notifications.

TouchPanelReadCalibrationAbort

This function aborts the currently active call to the TouchPanelCalibrateAPoint function.

TouchPanelReadCalibrationPoint

This function initiates the process of getting a calibration point.

TouchPanelSetCalibration

This function initializes calibration information in a global parameter vCalcParam, which you can use to convert noncalibrated points to calibrated points by the TouchPanelCalibrateAPoint function.

TouchPanelSetMode

This function sets mode information for a touch screen device.

而我们需要实现的PDD层驱动则是对应的以下DDSI函数,被对应的MDD层函数调用.

Programming element

Description

DdsiTouchPanelAttach

This function executes when the MDD's DLL entry point receives a DLL_PROCESS_ATTACH message.

DdsiTouchPanelDetach

This function executes when the MDD's DLL entry point receives a DLL_PROCESS_DETACH message.

DdsiTouchPanelDisable

This function disables the touch screen device.

DdsiTouchPanelEnable

This function applies power to the touch screen device and initializes it for operation.

DdsiTouchPanelGetDeviceCaps

This function queries capabilities of the touch screen device.

DdsiTouchPanelGetPoint

This function returns the most recently acquired point and its associated tip state information.

DdsiTouchPanelPowerHandler

This function indicates to the driver that the system is entering or leaving the suspend state.

DdsiTouchPanelSetMode

This function sets information about the touch screen device.

下一篇我们就来具体看看我们需要实现的这些DDSI函数.

你可能感兴趣的:(Windows CE 触摸屏(TouchPanel)驱动简析(1)-原理及驱动架构(基于WinCE5.0 SMDK2410 BSP的TouchPanel驱动))