WinCE中觸摸屏驅(qū)動(dòng)開發(fā)詳解
1.觸摸屏驅(qū)動(dòng)程序的模型
1.1 分層觸摸屏驅(qū)動(dòng)層序結(jié)構(gòu)
本觸摸屏驅(qū)動(dòng)采用分層驅(qū)動(dòng)程序結(jié)構(gòu),其驅(qū)動(dòng)模型如下圖所示,這種結(jié)構(gòu)將驅(qū)動(dòng)程序代碼區(qū)分為上層模型設(shè)備驅(qū)動(dòng)層(MDD),下層是依賴平臺(tái)的驅(qū)動(dòng)層(PDD)。其中MDD層通常無需修改就可以直接使用,改部分提供面向GWES的DDI的接口,而MDD通過指定的DDSI函數(shù)接口調(diào)用PDD,這就是我們通常驅(qū)動(dòng)要實(shí)現(xiàn)的部分。PDD部分和MDD部分除了DDSI函數(shù)集接口外,還要實(shí)現(xiàn)一些指定的變量的定義或變量初始化動(dòng)作(比如,gIntrTouch和gIntrTouchChanged在PDD層定義,但主要在MDD層使用。),也就是說MDD層和PDD層之間并不一定是以嚴(yán)格的分層模型來實(shí)現(xiàn)的,有時(shí)候也要通過共享變量的方式來完成交互。
1.2 DDI函數(shù)集(MDD層)
TouchPanelPowerHandler(BOOL boff)
Touch Screen的電源管理函數(shù),boff:TRUE表示關(guān)閉電源,F(xiàn)ALSE表示打開電源,其只是調(diào)用DdsiTouchPanelPowerHandler()函數(shù),該函數(shù)在進(jìn)入或退出poweroff狀態(tài)時(shí)產(chǎn)生。
TouchPanelCalibrationAPoint()
該函數(shù)用于校準(zhǔn)輸入的觸摸屏坐標(biāo),把觸摸屏坐標(biāo)轉(zhuǎn)換為顯示坐標(biāo),利用了公式Sx=A1*Tx+B1*Ty+C和Sy=A2*Tx+B2*Ty+C2。
TouchPanelReadCalibrationPoint()
在執(zhí)行觸摸屏校準(zhǔn)程序時(shí),用這個(gè)函數(shù)獲得在當(dāng)前校準(zhǔn)點(diǎn)的十字形上點(diǎn)擊的觸摸屏坐標(biāo)。
TouchPanelReadCalibrationAbord()
該函數(shù)在校準(zhǔn)取消時(shí)被調(diào)用(在觸摸屏校準(zhǔn)程序運(yùn)行過程中取消校準(zhǔn)),僅僅設(shè)置狀態(tài)位和事件后返回。
TouchPanelDisable()
禁用觸摸屏(touch panel)設(shè)備,該函數(shù)關(guān)閉ISR,停止中斷和注銷事件及其他同步手段,此函數(shù)調(diào)用了DdsiTouchPanelDisable()函數(shù)。
TouchPanelEnable(PFN_TOUCH_PANEL_CALLBACK pfnCallback)
PfnCallback是指向處理touch panel事件的回調(diào)函數(shù),該函數(shù)的執(zhí)行動(dòng)作:
⑴創(chuàng)建事件hTouchPanelEvent和hCalibrationSampleAvailable,其中當(dāng)觸筆按下或抬起,或者定時(shí)器中斷時(shí)會(huì)觸發(fā)hTouchPanelEvent事件,而在校準(zhǔn)狀態(tài)下當(dāng)有校準(zhǔn)數(shù)據(jù)輸入時(shí)會(huì)觸發(fā)hCalibrationSampleAvailable事件。
⑵初始化臨界區(qū),初始化所需的觸摸屏中斷gIntrTouch和gIntrTouchChanged,并且把它們關(guān)聯(lián)到事件hTouchPanelEvent中。
⑶創(chuàng)建IST TouchPanelpISR,并設(shè)定其優(yōu)先級(jí)。
TouchPanelSetCalibration()
該函數(shù)通過運(yùn)行觸摸屏校準(zhǔn)程序時(shí)的校準(zhǔn)動(dòng)作獲得顯示坐標(biāo)(Sx,Sy)和觸筆在十字形上按下的觸摸坐標(biāo)(Tx,Ty)用于計(jì)算校準(zhǔn)參數(shù)A1,B1,C1和A2,B2,C2。
TouchPanelGetDeviceCaps()
用于查詢觸摸屏設(shè)備支持的具體功能,通過DDSI函數(shù)查詢相應(yīng)的信息,當(dāng)查詢屏幕坐標(biāo)信息時(shí)保存屏幕信息,供后面程序計(jì)算校準(zhǔn)參數(shù)所用。
TouchPanelSetMode()
用于設(shè)置觸摸屏的工作模式(采用低采樣率還是高采樣率),當(dāng)設(shè)置IST優(yōu)先級(jí)時(shí)直接通過內(nèi)核API來完成,而直接將其他設(shè)置交給DdsiTouchPanelSetMode()函數(shù)來處理。
1.3WinCE DDSI函數(shù)集(PDD層)
DdsiTouchPanelGetDeviceCaps(INT iIndex, LPVOID lpOutput)
查詢touch panel設(shè)備的相關(guān)信息。
IIndex:查詢的索引值,其取值如下:
TPDC_SAMPLE_RATE_ID:查詢采樣率信息。
TPDC_CALIBRATION_POINT_COUNT_ID:查詢用于校驗(yàn)的點(diǎn)的個(gè)數(shù)。
TPDC_CALIBRATION_POINT_ID:查詢需要校驗(yàn)的點(diǎn)的坐標(biāo)。
LpOutput:根據(jù)iIndex值分別指向相關(guān)的信息。
DdsiTouchPanelSetMode()
設(shè)置Touch Panel工作模式。
iIndex:模式索引
TPSM_SAMPLERATE_HIGH_ID:高采樣率
TPSM_SAMPLERATE_LOW_ID:低采樣率
lpInput:指向包含相關(guān)信息的內(nèi)存
DdsiTouchPanelEnable()
該函數(shù)所執(zhí)行的動(dòng)作:
⑴為需要用到的I/O,ADC,PWM和INT寄存器分配內(nèi)存空間。
⑵配置觸摸屏控制器、中斷控制器和PWM的寄存器。
⑶申請(qǐng)觸摸屏中斷gIntrTouch和定時(shí)器中斷gIntrTouchChanged,并且對(duì)它們進(jìn)行初始化,為物理中斷號(hào)分配相應(yīng)的系統(tǒng)邏輯中斷號(hào)。。
DdsiTouchPanelDisable()
屏蔽觸摸屏中斷和釋放為I/O,ADC,PWM和INT寄存器分配的WinCE內(nèi)存空間。
DdsiTouchPanelAttach()
只是簡單地返回1。
DdsiTouchPanelDetach()
只是簡單地返回0。
DdsiTouchPanelGetPoint (TOUCH_PANEL_SAMPLE_FLAGS * pTipStateFlags,
INT * pUncalX,
INT * pUncalY )
獲得Touch Panel上被按下的點(diǎn)的狀態(tài)和坐標(biāo)。
◆pTipState:當(dāng)前觸摸點(diǎn)的狀態(tài),比如無效點(diǎn),有效點(diǎn),被按下的點(diǎn)等。
◆pUnCalX:觸摸點(diǎn)的X坐標(biāo)
◆pUnCalY:觸摸點(diǎn)的Y坐標(biāo)
◆DdsiTouchPanelPowerHandler()
設(shè)置touch panel的電源狀態(tài),boff:TRUE表示關(guān)閉電源,F(xiàn)ALSE表示打開電源,
2.觸摸屏驅(qū)動(dòng)程序的實(shí)現(xiàn)
Windows CE5.0觸摸屏驅(qū)動(dòng)程序采用中斷方式對(duì)觸摸筆的按下狀態(tài)進(jìn)行檢測,如果檢測到觸摸筆按下將產(chǎn)生中斷并觸發(fā)一個(gè)事件通知一個(gè)工作線程開始采集數(shù)據(jù)。同時(shí),驅(qū)動(dòng)將打開一個(gè)硬件定時(shí)器,只要檢測到觸摸筆仍然在按下狀態(tài)將定時(shí)觸發(fā)同一個(gè)事件通知工作線程采集數(shù)據(jù),直到觸摸筆抬起后關(guān)閉該定時(shí)器,并重新檢測按下狀態(tài)。驅(qū)動(dòng)中采用了觸摸屏中斷以及定時(shí)器中斷2個(gè)中斷源,不僅可以監(jiān)控觸摸筆按下和抬起狀態(tài),而且可以檢測觸摸筆按下時(shí)的拖動(dòng)軌跡。觸摸屏驅(qū)動(dòng)流程下圖所示
3.四線電阻式觸摸屏的工作原理
四線電阻式觸摸屏的結(jié)構(gòu)如圖1,在玻璃或丙烯酸基板上覆蓋有兩層透平,均勻?qū)щ姷腎TO層,分別做為X電極和Y電極,它們之間由均勻排列的透明格 點(diǎn)分開絕緣。其中下層的ITO與玻璃基板附著,上層的ITO附著在PET薄膜上。X電極和Y電極的正負(fù)端由“導(dǎo)電條”(圖中黑色條形部分)分別從兩端引 出,且X電極和Y電極導(dǎo)電條的位置相互垂直。引出端X-,X+,Y-,Y+一共四條線,這就是四線電阻式觸摸屏名稱的由來。當(dāng)有物體接觸觸摸屏表面并施以 一定的壓力時(shí),上層的ITO導(dǎo)電層發(fā)生形變與下層ITO發(fā)生接觸,該結(jié)構(gòu)可以等效為相應(yīng)的電路,
計(jì)算觸點(diǎn)的X,Y坐標(biāo)分為如下兩步:
1. 計(jì)算Y坐標(biāo),在Y+電極施加驅(qū)動(dòng)電壓Vdrive, Y-電極接地,X+做為引出端測量得到接觸點(diǎn)的電壓,由于ITO層均勻?qū)щ?,觸點(diǎn)電壓與Vdrive電壓之比等于觸點(diǎn)Y坐標(biāo)與屏高度之比。
2. 計(jì)算X坐標(biāo),在X+電極施加驅(qū)動(dòng)電壓Vdrive, X-電極接地,Y+做為引出端測量得到接觸點(diǎn)的電壓,由于ITO層均勻?qū)щ?,觸點(diǎn)電壓與Vdrive電壓之比等于觸點(diǎn)X坐標(biāo)與屏寬度之比。
測得的電壓由ADC轉(zhuǎn)化為觸摸點(diǎn)的原始坐標(biāo)(數(shù)值范圍由所選用的A/D轉(zhuǎn)換器位數(shù)決定)后,還要根據(jù)具體使用的液晶屏實(shí)際像素進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換后通過校準(zhǔn)直接轉(zhuǎn)化為屏幕上的坐標(biāo),供GWES使用。
4.觸摸屏的接口部分
◆X+:連接觸摸屏控制器的TSXP,。
◆X-:連接觸摸屏控制器的TSXM。
◆Y+:連接觸摸屏控制器的TSYP。
◆Y-:連接觸摸屏控制器的TSYM。
在觸摸屏接口使用時(shí),TSXM或TSYM應(yīng)該接觸摸屏接口的。
5.配置控制器硬件
5.1 ADCCON-----ADC控制寄存器
ECFLG:ADCCON[15],AD轉(zhuǎn)換結(jié)束標(biāo)志,只讀,0表示AD轉(zhuǎn)換在過程中;1表示AD轉(zhuǎn)換結(jié)束。
PRSCEN:ADCCON[14],AD轉(zhuǎn)換器預(yù)分頻器使能,在此使能,故為1。
PRSCVL:ADCCON[13:6],AD轉(zhuǎn)換器預(yù)分頻器值,在此為49。
SEL_MUX:ADCCON[5:3],模擬信號(hào)輸入通道選擇,在此選擇XP,故為7。
STDBM:ADCCON[2],備用操作模式選擇,在此選擇普通操作模式,故為0。
READ_START:ADCCON[1],通過讀取來啟動(dòng)A/D轉(zhuǎn)換,在此選擇通過讀取操作無效來啟動(dòng)A/D轉(zhuǎn)換,故為0。
ENABLE_START,ADCCON[0],通過使能該位來啟動(dòng)A/D轉(zhuǎn)換,在此選擇無操作。此位在A/D轉(zhuǎn)換開始后被使能。
5.2 ADCTSC-----ADC觸摸屏控制寄存器
UD_SEN:ADCTSC[8],在此選擇檢測到觸筆按下就產(chǎn)生中斷信號(hào),故為0。
YM_SEN:ADCTSC[7],YM開關(guān)使能,在此選擇YM輸出驅(qū)動(dòng)有效(GND),故為1。
YP_SEN:ADCTSC[6],YP開關(guān)使能,在此選擇YP輸出驅(qū)動(dòng)無效(AIN5),故為1。
XM_SEN:ADCTSC[5],XM開關(guān)使能,在此選擇XM輸出驅(qū)動(dòng)無效(Hi-Z),故為0。
XP_SEN:ADCTSC[4],XP開關(guān)使能,在此選擇XP輸出驅(qū)動(dòng)無效(AIN7),故為1。
PULL_UP:ADCTSC[3],上拉開關(guān)使能,在此選擇XP上拉有效,故為0。
AUTO_PST:ADCTSC[2],初始化時(shí),在此選擇自動(dòng)連續(xù)測量X坐標(biāo)和Y坐標(biāo),故為0,但如果開始轉(zhuǎn)換時(shí),應(yīng)該置1。
XY_PST:ADCTSC[1:0],手動(dòng)測量X坐標(biāo)和Y坐標(biāo),在此選擇等待中斷模式,故為3。
注:當(dāng)?shù)却|摸屏中斷時(shí),XP_SEN位(XP輸出無效)應(yīng)該置為1,且PULL_UP(XP上拉使能)位應(yīng)該置為0。
5.3 ADCDLY-----ADC開始延時(shí)寄存器
DELAY:ADCDLY[154:0],因?yàn)檫x擇等待中斷模式,此值表示,當(dāng)觸筆按下出現(xiàn)在睡眠模式時(shí),產(chǎn)生一個(gè)用于推出睡眠模式的信號(hào),有幾個(gè)毫秒的時(shí)間間隔。在此此值為40000?????????(40s,太長了吧?)
SUBINTMSK-----WinCE中子中斷屏蔽寄存器
該寄存器有11位,每位和一位中斷源相關(guān)。觸摸屏中斷請(qǐng)求有效,故第十位應(yīng)設(shè)為0。
v_pINTregs->INTSUBMSK &= ~(1<<IRQ_SUB_TC);
5.4 TCFG1-----5路多路器及DMA模式選擇寄存器
MUX3:TCFG1[15:12],為PWM計(jì)時(shí)器3選擇多路輸入,并初始化其值,每個(gè)定時(shí)器都有一個(gè)時(shí)鐘分頻器,其可以生成5鐘不同的分頻信號(hào)(1/2,1/4,1/8,1/16和TCLK),在此選擇1/16分頻。
v_pPWMregs->TCFG1 &= ~(0xf << 12); /* Timer3's Divider Value */
v_pPWMregs->TCFG1 |= (3 << 12); /* 1/16
TCNTB3-----PWM定時(shí)器3計(jì)數(shù)緩存寄存器,選擇定時(shí)器3為時(shí)鐘,比如定義10ms中斷一次,提供觸摸屏采樣時(shí)間基準(zhǔn),即10ms觸摸屏采樣一次。在此為17×1000/100=170,在此PCLK=400MHz/6,可以得出timer3的時(shí)鐘頻率=PCLK/(244+1).16,可以算數(shù)觸摸屏就是10ms產(chǎn)生一次定時(shí)中斷,進(jìn)行一次采樣。#p#
6.判斷觸摸屏是否被觸摸和中斷處理
我們采用中斷等待模式,當(dāng)觸筆按下時(shí),觸摸屏控制器產(chǎn)生中斷信號(hào)(INT_TC)給中斷控制器,中斷處理程序捕捉到這個(gè)物理中斷后,調(diào)用已注冊(cè)的ISR來決定如何處理這個(gè)硬件中斷。ISR向內(nèi)核返回對(duì)應(yīng)于這個(gè)物理中斷的邏輯中斷號(hào),比如我們用觸筆按下觸摸屏?xí)r,產(chǎn)生INT_TC物理中斷,ISR把物理中斷號(hào)映射成邏輯中斷信號(hào),然后操作系統(tǒng)根據(jù)物理中斷號(hào)觸發(fā)所關(guān)聯(lián)的WinCE事件內(nèi)核對(duì)象gIntrTouch,從而等待這個(gè)事件內(nèi)核對(duì)象的IST(TouchPanelpISR,這個(gè)名字不是很合理應(yīng)該改為TouchPanelpIST)來開始執(zhí)行中斷處理。
我們?cè)隍?qū)動(dòng)中采用了兩個(gè)中斷源,一個(gè)是觸摸屏中斷(包括觸筆按下或抬起中斷,根據(jù)ADC觸摸屏控制寄存器ADCTSC的UD_SEN位來決定,在代碼中的名字是gIntrTouch),也就是說當(dāng)觸筆按下或抬起時(shí)會(huì)產(chǎn)生物理中斷INT_TC,其對(duì)應(yīng)的邏輯中斷號(hào)為SYSINTR_TOUCH;另一個(gè)是定時(shí)器中斷(在此采用timer3),只要檢測到觸筆仍然在按下狀態(tài),將定時(shí)(在此是10ms,在代碼中的名字是gIntrTouchChanged)產(chǎn)生定時(shí)中斷INT_TIMER3,其對(duì)應(yīng)的邏輯中斷號(hào)為SYSINTR_TOUCH_CHANGED。這兩個(gè)中斷產(chǎn)生時(shí)都會(huì)觸發(fā)同一個(gè)事件hTouchPanelEvent,然后等待這個(gè)時(shí)間的IST(TouchPanelpISR)線程將開始執(zhí)行。
以下是產(chǎn)生中斷的條件
⑴ 觸筆按下時(shí),產(chǎn)生觸摸屏中斷。
⑵ 觸筆抬起時(shí),也產(chǎn)生觸摸屏中斷。
⑶ 觸筆按下產(chǎn)生觸摸屏中斷的同時(shí),驅(qū)動(dòng)打開硬件定時(shí)器timer3,只要檢測到觸筆仍然在按下狀態(tài),將定時(shí)(每隔10ms產(chǎn)生定時(shí)器中斷)中斷。
判斷觸筆對(duì)于觸摸屏的活動(dòng)情況的流程如下:
7. 獲得穩(wěn)定、去抖動(dòng)的位置測量數(shù)據(jù)
在獲得觸摸點(diǎn)的原始坐標(biāo)(數(shù)值范圍由所選用的A/D轉(zhuǎn)換器位數(shù)決定)后,還要根據(jù)具體使用的液晶屏實(shí)際像素進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換后通過校準(zhǔn)直接轉(zhuǎn)化為屏幕上的坐標(biāo),以方便圖形界面的后續(xù)開發(fā),然后通過回調(diào)函數(shù)把屏幕坐標(biāo)和采樣狀態(tài)這些參數(shù)傳遞給GWES
人機(jī)界面中對(duì)觸摸屏的操作有以下3鐘:
⑴ 觸摸筆在觸摸屏上的位置不變。
⑵ 觸摸筆在觸摸屏上連續(xù)滑過。
⑶ 觸摸筆在觸摸屏上有大幅度的跳躍。
7.1 觸摸屏采樣程序
當(dāng)觸筆按下時(shí),就開始進(jìn)行觸摸屏觸摸坐標(biāo)的采樣,同時(shí)打開定時(shí)中斷,為10ms后的定時(shí)器中斷做好準(zhǔn)備。下面是采樣過程:
⑴ 通過對(duì)ADC控制寄存器ADCCON和ADC觸摸屏控制寄存ADCTSC的設(shè)置,啟動(dòng)自動(dòng)測量X坐標(biāo)和Y坐標(biāo)。
⑵ 等待AD轉(zhuǎn)換完成,通過對(duì)ADCCON的ECFLG的訪問可以判斷AD轉(zhuǎn)換完成與否。
⑶ AD轉(zhuǎn)換完成后,就通過對(duì)ADC轉(zhuǎn)換數(shù)據(jù)寄存器ADCDAT0和ADCDAT1的讀取觸摸屏坐標(biāo)的Y坐標(biāo)和X坐標(biāo)值。
⑷ 回到第一步,連續(xù)取得5組數(shù)據(jù),求和并計(jì)算其平均值,如果平均值和這5組數(shù)據(jù)中最近一次數(shù)據(jù)的差值大于我們規(guī)定的閾值(這個(gè)閾值應(yīng)該需要根據(jù)我們采用的LCD屏的分辨率來決定)時(shí),認(rèn)為此次采樣值無效,同時(shí)對(duì)修改寄存器ADCTSC的設(shè)置,讓其處于等待中斷模式,為下次中斷(觸筆抬起中斷做好準(zhǔn)備)。
7.2 觸摸屏濾波程序
通過函數(shù)TSP_GetXY()得到觸筆按下位置的觸摸屏坐標(biāo)后,到把校準(zhǔn)后的坐標(biāo)通過回調(diào)函數(shù)傳遞給GWES,其中此回調(diào)函數(shù)是通過GWES調(diào)用TouchPanelEnable(pfnCallback)函數(shù)傳遞進(jìn)來的,這過程有以下步驟:
⑴ 通過函數(shù)TSP_GetXY()得到觸筆按下位置的觸摸屏坐標(biāo)。
⑵ 根據(jù)具體使用的液晶屏實(shí)際像素對(duì)觸摸屏坐標(biāo)進(jìn)行轉(zhuǎn)換,也即通過函數(shù)
TSP_TransXY()轉(zhuǎn)換TSP_GetXY()函數(shù)得到的觸摸屏坐標(biāo),用到公式
X=W*(x-x1)/(x2-x1),Y=H*(y-y1)/(y2-y1),其中(x1,y1)和(x2,y2)分別表示顯示區(qū)域左上角和右上角對(duì)應(yīng)的觸摸屏的采樣坐標(biāo),在此顯示屏的分辨率為240×320,代碼中(x1,y1)和(x2,y2)值為(85,105)和(965,980),這些值是分辨率240×4和320×4后確定的,相應(yīng)地我們也需要對(duì)W和H做處理:W=4*W,H=4*H,(x,y)是觸摸屏上任意一點(diǎn)的采樣坐標(biāo)(在這里有一個(gè)地方有疑問,右下角坐標(biāo)的x值為什么是965,它不是大于240×4了嗎?)。
⑶ 對(duì)由⑵得到的坐標(biāo)值進(jìn)行判斷,如果x坐標(biāo)值大于等于240×4,或者y坐標(biāo)值大于等于320×4(也就是⑵轉(zhuǎn)換前的x坐標(biāo)值大于等于965,y坐標(biāo)值大于等于980)時(shí),我們認(rèn)為這次采樣值無效,或者如果最近兩次采樣值的相應(yīng)的x坐標(biāo)值差額或y坐標(biāo)值差額分別小于等于15和40,則表示觸筆在這兩次采樣的時(shí)間內(nèi)一直在同一個(gè)位置,故忽略最近的采樣值;如果如果最近兩次采樣值的相應(yīng)的x坐標(biāo)值差額或y坐標(biāo)值差額分別大于15和40,則表示觸筆在這兩次采樣的時(shí)間內(nèi)觸筆在滑動(dòng),此次采樣有效。
⑷通過TouchPanelCalibrateAPoint()函數(shù)把有效的觸摸屏按下點(diǎn)的坐標(biāo)轉(zhuǎn)換成相應(yīng)的顯示設(shè)備點(diǎn)坐標(biāo),用到Sx=A1*Tx+B1*Ty+C和Sy=A2*Tx+B2*Ty+C2這兩個(gè)公式,其中A1,B1,C1和A2,B2,C2在執(zhí)行觸摸屏校準(zhǔn)程序的時(shí)候通過TouchPanelSetCalibration()函數(shù)計(jì)算出來。
⑸通過⑷轉(zhuǎn)換得到顯示坐標(biāo),對(duì)這些值進(jìn)行邊界檢查,如果此x坐標(biāo)值大于等于。
⑹通過TouchPanelEnable(pfnCallback)函數(shù)傳遞進(jìn)來的函數(shù)指針進(jìn)行回調(diào),同時(shí)傳遞采樣狀態(tài),校準(zhǔn)后得到的顯示坐標(biāo)給GWES。
觸筆按下的觸摸屏坐標(biāo)經(jīng)過校準(zhǔn)后,通過callbak函數(shù)采樣狀態(tài)和位置變化信息通過GWES發(fā)送給更高層的圖形軟件。
8.校準(zhǔn)觸摸屏
觸摸屏的校準(zhǔn)過程如下:
⑴ 調(diào)用TouchPanelEnable函數(shù)來啟動(dòng)觸摸屏采樣。
⑵ 調(diào)用TouchPanelGetDeviceCaps函數(shù)來獲得校準(zhǔn)觸點(diǎn)的個(gè)數(shù)。
⑶ 去校準(zhǔn)點(diǎn),對(duì)于每一個(gè)校準(zhǔn)點(diǎn)都有一下過程:
I:調(diào)用TouchPanelGetDeviceCaps函數(shù)來得到校準(zhǔn)點(diǎn)的坐標(biāo)。
II:在上述校準(zhǔn)點(diǎn)處畫十字,等待用戶點(diǎn)擊.
III:用戶點(diǎn)擊十字圖形后,調(diào)用TouchPanelReadCalibrationPoint函數(shù)來獲得上述校準(zhǔn)點(diǎn)處觸摸屏對(duì)應(yīng)的坐標(biāo)。
⑷ 當(dāng)取完所需用的校準(zhǔn)點(diǎn),調(diào)用TouchPanelSetCalibration函數(shù)來計(jì)算校準(zhǔn)系數(shù)A1,B1,C1和A2,B2,C2。
完成上述步驟后,WinCE平臺(tái)下的觸摸屏驅(qū)動(dòng)開發(fā)就已基本完成,實(shí)際操作中還需考慮具體的硬件環(huán)境。
【編輯推薦】