以文本方式查看主題 - 曙海教育集團論壇 (http://www.rfoamep.cn/bbs/index.asp) -- Wince技術討論區(qū) (http://www.rfoamep.cn/bbs/list.asp?boardid=9) ---- WinCE中的Touch Panel驅動介紹 (http://www.rfoamep.cn/bbs/dispbbs.asp?boardid=9&id=1380) |
-- 作者:wangxinxin -- 發(fā)布時間:2010-11-16 11:29:14 -- WinCE中的Touch Panel驅動介紹 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:表示上一次采樣狀態(tài)是按在觸摸屏上 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:指向一個內存區(qū)域,用于存放獲得的相關信息 (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): |