新聞中心

EEPW首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > 觸摸屏驅(qū)動程序的設(shè)計(jì)和實(shí)現(xiàn)

觸摸屏驅(qū)動程序的設(shè)計(jì)和實(shí)現(xiàn)

作者: 時(shí)間:2009-08-28 來源:網(wǎng)絡(luò) 收藏

在理想情況下,校正基準(zhǔn)只需兩組原始數(shù)據(jù),即在屏幕對角讀取的最小和最大值。但在實(shí)際應(yīng)用中,因?yàn)樵S多電阻式存在明顯的非線性,如果只在最小和最大值之間簡單的插入位置數(shù)值會導(dǎo)致非常的不精確。因此,在WinCE中需要獲取多個(gè)校準(zhǔn)點(diǎn),常用的校準(zhǔn)點(diǎn)數(shù)量為5個(gè)。

方法是:①首先在函數(shù)DdsiTouchPanelGetDeviceCaps 中設(shè)置校準(zhǔn)點(diǎn)的個(gè)數(shù);②是系統(tǒng)在 TouchDriverCalibrationPointGet中獲取每個(gè)校準(zhǔn)點(diǎn)的屏幕坐標(biāo);③是在屏幕界面的校準(zhǔn)點(diǎn)坐標(biāo)處顯示一個(gè)位置符號,用戶需要精確地在位置符號按下;④通過TouchPanelReadCalibrationPoint函數(shù)讀取相應(yīng)的觸摸屏坐標(biāo)值;⑤然后再開始下一個(gè)校準(zhǔn)點(diǎn),直到循環(huán)設(shè)定的次數(shù)后將采集到的觸摸屏坐標(biāo)值和校準(zhǔn)點(diǎn)屏幕坐標(biāo)送到TouchPanelSetCalibration函數(shù)中進(jìn)行處理,該函數(shù)將產(chǎn)生校準(zhǔn)基準(zhǔn)參數(shù)。校準(zhǔn)完成之后,觸摸屏便可以開始正常的操作了。

(3)判斷屏幕是否被觸摸

一旦完成了觸摸屏硬件設(shè)置、初始化和基準(zhǔn)參數(shù)校準(zhǔn)后,接下來就需要用一種可靠的方法來判斷屏幕是否被觸摸了。WinCE提供了屏幕是否被觸摸的檢測機(jī)制,而且當(dāng)觸摸事件發(fā)生時(shí)還可選擇是否中斷主處理器。判斷屏幕是否被觸摸的驅(qū)動程序的函數(shù)名叫WaitForTouchState()。當(dāng)屏幕被初次觸摸時(shí)喚醒主機(jī)的中斷,稱為PEN_DOWN中斷。這樣做可以讓驅(qū)動程序在屏幕沒有被觸摸時(shí)中斷自己的執(zhí)行,而不消耗任何CPU資源,而一旦用戶觸摸屏幕,驅(qū)動程序就被喚醒并進(jìn)入轉(zhuǎn)換模式。

當(dāng)被喚醒后就有一組模數(shù)數(shù)據(jù)等待轉(zhuǎn)換并產(chǎn)生中斷信號。中斷是硬件與軟件打交道的重要方法,所以大多數(shù)驅(qū)動程序都涉及到中斷處理。就中斷處理而言, WinCE采用了一種獨(dú)特的方法。它將中斷處理分為兩步:中斷服務(wù)例程(ISR)和中斷服務(wù)線程(IST)。具體來講就是把每個(gè)硬件的設(shè)備中斷請求 (IRQ) 和一個(gè)ISR 聯(lián)系起來,當(dāng)一個(gè)中斷發(fā)生并未被屏蔽時(shí),內(nèi)核調(diào)用該中斷注冊的ISR。因?yàn)镮SR 運(yùn)行于內(nèi)核模式,所以應(yīng)該被設(shè)計(jì)得盡可能的短,ISR 的基本職責(zé)是引導(dǎo)內(nèi)核調(diào)度和啟動合適的IST。IST 在設(shè)備驅(qū)動程序軟件模塊中編寫,它從硬件獲取或向硬件發(fā)送數(shù)據(jù)和控制代碼,并進(jìn)一步處理設(shè)備中斷。
WinCE觸摸屏驅(qū)動程序是采用中斷方式對觸摸筆的按下狀態(tài)進(jìn)行檢測,當(dāng)檢測到觸摸筆按下時(shí)產(chǎn)生的中斷,就會觸發(fā)一個(gè)事件通知一個(gè)工作線程開始采集數(shù)據(jù)。同時(shí),驅(qū)動將打開一個(gè)硬件定時(shí)器,只要檢測到觸摸筆仍然在按下狀態(tài),將定時(shí)觸發(fā)同一個(gè)事件通知這個(gè)工作線程繼續(xù)采集數(shù)據(jù),直到觸摸筆抬起后關(guān)閉該定時(shí)器。簡單的說,就是驅(qū)動程序會同時(shí)采用觸摸屏中斷和定時(shí)器中斷這兩個(gè)中斷源。目的在于不僅可以監(jiān)控觸摸筆按下和抬起狀態(tài),而且可以檢測觸摸筆按下時(shí)的拖動軌跡。觸摸屏中斷的兩個(gè)邏輯中斷分別是:SYSINTR_TOUCH是用于觸摸筆點(diǎn)擊觸摸屏?xí)r產(chǎn)生相應(yīng)的中斷;SYSINTR_TOUCH_CHANGE 則用于觸摸筆離開時(shí)產(chǎn)生相應(yīng)的中斷。

電容式觸摸屏相關(guān)文章:電容式觸摸屏原理


關(guān)鍵詞: 觸摸屏 驅(qū)動程序

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉