WinCE中的Touch Panel驱动是由GWES模块来 1 Touch Panel驱动中的数据结构 (1) TOUCH_PANEL_SAMPLE_FLAGS 用于描述一个采样点的信息,这些信息被定义在一个枚举结构中: enum enumTouchPanelSampleFlags { (2) TPDC_CALIBRATION_POINT 用于描述一个校验点的相关信息,结构如下: struct TPDC_CALIBRATION_POINT { (3) TPDC_CALIBRATION_POINT_COUNT 用于描述需要校验的点的个数,结构如下: struct TPDC_CALIBRATION_POINT_COUNT { flags:一般为0 cCalibrationPoints:需要校验的点的个数,一般是5 (4) gIntrTouch和gIntrTouchChanged 这是两个被MDD层用到的中断,需要在PDD层中定义,如下: DWORD gIntrTouch = SYSINTR_NOP; DWORD gIntrTouchChanged = SYSINTR_NOP; gIntrTouch用于描述触摸屏中断,要和硬件的触摸屏中断相关联。 gIntrTouchChanged用于在触摸屏按下后,每隔一段时间进行一次采样,应该和硬件的一个定时器中断相关联。 这两个值应该在DdsiTouchPanelEnable(..)函数中和硬件中断关联,并在函数DdsiTouchPanelGetPoint(..)中根据情况清除相应的中断。 2 MDD层API (1) BOOL TouchPanelEnable(PFN_TOUCH_PANEL_CALLBACK pfnCallback): 使能Touch Panel设备,用于初始化Touch Panel。 pfnCallback:指向处理Touch Panel事件的回调函数 (2) Void TouchPanelDisable(void): 禁用Touch Panel设备。 (3) BOOL TouchPanelGetDeviceCaps(INT iIndex, LPVOID lpOutput ): 获得Touch Panel设备的相关信息。 iIndex:索引值 TPDC_SAMPLE_RATE_ID:采样率信息 TPDC_CALIBRATION_POINT_COUNT_ID:采样点个数信息 TPDC_CALIBRATION_POINT_ID:采样点坐标信息 lpOutput:指向一个内存区域,用于存放获得的相关信息 (4) VOID TouchPanelCalibrateAPoint(INT32 UncalX, INT32 UncalY, INT32* pCalX, INT32* pCalY): 将输入的未经过校验的坐标信息转换成校验后的坐标信息。 UncalX:输入的X坐标 UncalY:输入的Y坐标 pCalX:校验后的X坐标 pCalY: 校验后的Y坐标 (5) VOID TouchPanelPowerHandler(BOOL bOff): Touch Panel的电源控制函数。 bOff:TRUE表示关闭电源,FALSE表示打开电源 (6) BOOL TouchPanelReadCalibrationPoint(INT* pRawX, INT* pRawY): 获得Touch Panel的坐标。 pRawX:触摸屏的X坐标 PRawY:触摸屏的Y坐标 (7) VOID TouchPanelReadCalibrationAbort(void): 终止当前的校验。 (8) VOID TouchPanelSetCalibration(INT32 cCalibrationPoints, INT32* pScreenXBuffer, INT32* pScreenYBuffer, INT32* pUncalXBuffer, INT32* pUncalYBuffer): 校验函数。通过一组实际的触摸屏上采集的点坐标和相应的屏幕坐标计算校验系数。具体公式如下: Sx = A1*Tx + B1*Ty + C1 Sy = A2*Tx + B2*Ty + C2 这里就是通过显示屏坐标和采样的触摸屏坐标计算A1,B1,C1,A2,B2,C2。 cCalibrationPoints:校验点的个数 pScreenXBuffer:一组显示屏上的X坐标 pScreenYBuffer:一组显示屏上的Y坐标 pUncalXBuffer:一组触摸屏上采样的X坐标 pUncalYBuffer:一组触摸屏上采样的Y坐标 (9) BOOL TouchPanelSetMode(INT iIndex, LPVOID lpInput): 设置Touch Panel的工作模式。 iIndex:索引模式 TPSM_SAMPLERATE_HIGH:设置高采样率 TPSM_SAMPLERATE_LOW:设置低采样率 TPSM_PRIORITY_HIGH_ID:设置触摸屏的IST为高优先级 TPSM_PRIORITY_NORMAL_ID:设置IST为正常优先级 lpInput:指向一块内存,其中包含相关信息。 3 PDD层API (1) LONG DdsiTouchPanelAttach(void): (2) LONG DdsiTouchPanelDettach(void): 该函数在Touch Panel驱动的Dll被卸载的时候调用 (3) BOOL DdsiTouchPanelEnable(void): 打开Touch Panel电源并做初始化。一般会在这里初始化一些信息,打开Touch Panel设备电源并做初始化。 (4) VOID DdsiTouchPanelDisable(void): 关闭Touch Panel设备。关闭Touch Panel电源并释放资源。 (5) BOOL DdsiTouchPanelGetDeviceCaps(ULONG iIndex, LPVOID lpOutput): 查询Touch Panel设备的相关信息 iIndex:查询的索引值 TPDC_SAMPLE_RATE_ID:查询采样率信息 TPDC_CALIBRATION_POINT_ID:查询需要校验的点的坐标 TPDC_CALIBRATION_POINT_COUNT_ID:查询用于校验的点的个数 lpOutput:根据iIndex值分别指向相关的信息 (6) void DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS pTipState, PLONG pUnCalX, PLONG pUnCalY): 获得Touch Panel上被按下的点的状态和坐标。 pTipState:当前触摸点的状态,比如无效点,有效点,被按下的点等。 pUnCalX:触摸点的X坐标 pUnCalY:触摸点的Y坐标 (7) VOID DdsiTouchPanelPowerHandler(BOOL bOff): 设置Touch Panel的电源状态。 bOff:TRUE表示关闭电源,FALSE表示打开电源 (8) BOOL DdsiTouchPanelSetMode(ULONG iIndex, LPVOID lpInput): 设置Touch Panel工作模式。 iIndex:模式索引 TPSM_SAMPLERATE_HIGH_ID:高采样率 TPSM_SAMPLERATE_LOW_ID:低采样率 lpInput:指向包含相关信息的内存 4 注册表设置 “InputConfig”:WinCE系统输入配置。 Bit0表示键盘输入 Bit1表示Touch Panel输入 Bit2表示硬件按键输入 “DeviceName”:Touch Panel驱动的名字。 “MaxCalError”:Touch Panel的精确度配置。 “CalibrationData”:Touch Panel的校验值。第一次启动WinCE后,需要通过WinCE的触摸屏校验程序对Touch Panel进行校验。校验完成后,校验值会被写入注册表里面。 下面是关于Touch Panel的注册表配置的例子: [HKEY_LOCAL_MACHINEControlPanel] 个人觉得,要想更好的理解Touch Panel驱动,还是需要去读读代码,基于WinCE6.0下,可以参考"WINCE600PLATFORMH4SAMPLESRCDRIVERSTOUCH"下面的驱动,基于这个驱动开发自己的驱动会比较方便。 (ddvip) |