您的位置: 首页 - 站长

wordpress建手机网站高端网站设计新鸿儒

当前位置: 首页 > news >正文

wordpress建手机网站,高端网站设计新鸿儒,虾皮跨境电商注册,常州网站建设公司排名转载自#xff1a;http://blog.csdn.net/nanjianhui/article/details/2763979 作者#xff1a;ARM-WinCE WinCE中的Touch Panel驱动是由GWES模块来管理的#xff0c;Touch Panel驱动接收用户的触摸信息#xff0c;并将其转换为屏幕上的坐标信息#xff0c;传给GWES模块。…转载自http://blog.csdn.net/nanjianhui/article/details/2763979 作者ARM-WinCE WinCE中的Touch Panel驱动是由GWES模块来管理的Touch Panel驱动接收用户的触摸信息并将其转换为屏幕上的坐标信息传给GWES模块。在WinCE中Touch Panel驱动是分层的分为MDD层和PDD层这和其他WinCE设备驱动是一样的。MDD层由微软提供用户只需要实现MDD和PDD层间的DDSI函数就可以了。如图 WinCE中的GWES模块负责加载和管理Touch Panel驱动Touch Panel的MDD层向上提供DDI接口PDD层是针对硬件的实现对MDD层提供DDSI接口。 1 Touch Panel驱动中的数据结构 (1) TOUCH_PANEL_SAMPLE_FLAGS 用于描述一个采样点的信息这些信息被定义在一个枚举结构中 enum enumTouchPanelSampleFlags { TouchSampleValidFlag 0x01, TouchSampleDownFlag 0x02, TouchSampleIsCalibratedFlag 0x04, TouchSamplePreviousDownFlag 0x08, TouchSampleIgnore 0x10, TouchSampleMouse 0x40000000 }; TouchSampleValidFlag一个有效的采样值 TouchSampleDownFlag第一次按触摸屏时返回该flag TouchSampleIsCalibratedFlag采样的x和y坐标值不需要再被校验了 TouchSamplePreviousDownFlag表示上一次采样状态是按在触摸屏上 TouchSampleIgnore忽略这次采样值 TouchSampleMouse预留 (2) TPDC_CALIBRATION_POINT 用于描述一个校验点的相关信息结构如下 struct TPDC_CALIBRATION_POINT { INT PointNumber; INT cDisplayWidth; INT cDisplayHeight; INT CalibrationX; INT CalibrationY; }; PointNumber校验点索引值用于描述校验点在LCD上的位置 0中间 1左上 2左下 3右下 4右上 cDisplayWidth显示的宽度 cDisplayHeight显示的高度 CalibrationX校验点的x坐标值 CalibrationY校验点的y坐标值 (3) TPDC_CALIBRATION_POINT_COUNT 用于描述需要校验的点的个数结构如下 struct TPDC_CALIBRATION_POINT_COUNT { DDI_TOUCH_PANEL_CALIBRATION_FLAGS flags; INT cCalibrationPoints; }; flags一般为0 cCalibrationPoints需要校验的点的个数一般是5 (4) gIntrTouch和gIntrTouchChanged 这是两个被MDD层用到的中断需要在PDD层中定义如下 DWORD gIntrTouch        SYSINTR_NOP; DWORD gIntrTouchChanged SYSINTR_NOP; gIntrTouch用于描述触摸屏中断要和硬件的触摸屏中断相关联。 gIntrTouchChanged用于在触摸屏按下后每隔一段时间进行一次采样应该和硬件的一个定时器中断相关联。 这两个值应该在DdsiTouchPanelEnable(..)函数中和硬件中断关联并在函数DdsiTouchPanelGetPoint(..)中根据情况清除相应的中断。 2 MDD层API MDD为上层导出所需的Touch Panel驱动接口函数上层通过这些函数可以完成对Touch Panel的操作下面会介绍这些函数的功能。 (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的电源控制函数。 bOffTRUE表示关闭电源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) 该函数在Touch Panel驱动的Dll被加载的时候调用 (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的电源状态。 bOffTRUE表示关闭电源FALSE表示打开电源 (8) BOOL DdsiTouchPanelSetMode(ULONG iIndex, LPVOID lpInput) 设置Touch Panel工作模式。 iIndex模式索引 TPSM_SAMPLERATE_HIGH_ID高采样率 TPSM_SAMPLERATE_LOW_ID低采样率 lpInput指向包含相关信息的内存 4 注册表设置 对于Touch Panel驱动来说有些注册表项是需要配置的。具体如下 “InputConfig”WinCE系统输入配置。 Bit0表示键盘输入 Bit1表示Touch Panel输入 Bit2表示硬件按键输入 “DeviceName”Touch Panel驱动的名字。 “MaxCalError”Touch Panel的精确度配置。 “CalibrationData”Touch Panel的校验值。第一次启动WinCE后需要通过WinCE的触摸屏校验程序对Touch Panel进行校验。校验完成后校验值会被写入注册表里面。 下面是关于Touch Panel的注册表配置的例子 [HKEY_LOCAL_MACHINE/ControlPanel] InputConfigdword:3    ;3 keybd and touch screen [HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH] DriverNametouch.dll MaxCalErrordword:8 CalibrationData446,671 36,191 38,1179 856,1161 862,169 个人觉得要想更好的理解Touch Panel驱动还是需要去读读代码基于WinCE6.0下可以参考/WINCE600/PLATFORM/H4SAMPLE/SRC/DRIVERS/TOUCH下面的驱动基于这个驱动开发自己的驱动会比较方便。