wince7 螢幕控制 wince7下的觸控螢幕驅動

2021-10-25 16:41:02 字數 1335 閱讀 7158

在嵌入式系統中較為常用的是四線電阻式觸控螢幕,通過檢測x軸和y軸的電壓,來確定觸點的位置。一般觸控螢幕系統結構為:觸控螢幕->觸控螢幕控制器->處理器。

wince7下觸控螢幕的驅動分為pdd層(位於bsp目錄中)和mdd層(位於public目錄中)。pdd層和mdd層通過ddsi介面函式連線,mdd層和上層通過ddi函式連線。其中mdd層一般無需修改,我們只需修改pdd層的**。

比如我的bsp目錄下觸控螢幕驅動中的touchscreenpdd.cpp檔案中主要有如下函式:

tchpdd_init()

tchpdd_ioctl()

pddtouchist()

pddinitializehardware()

pddtouchpanelenable()

pddtouchpanelgetpoint()

pddcalibrationthread()

pddstartcalibrationthread()

pdddeinitailzehardware()

pddtouchpaneldisable()

其中tchpdd開頭的函式就是ddsi函式,pdd開頭的函式就是pdd層的函式。mdd層會最先呼叫tchpdd_init()函式,該函式會將ddsi函式以函式指標的形式傳遞給mdd層,並呼叫pdd層的函式進行必要的初始化,如呼叫pddinitializehardware()來初始化spi,gpio(我的觸控螢幕控制器使用spi介面),呼叫pddtouchpanelenable()來建立「觸控螢幕事件」,建立ist執行緒等。

ist執行緒函式pddtouchist()中會有乙個while迴圈,如下圖所示:

迴圈中有乙個waitforsingleobject(,)函式。該函式有兩個引數,第乙個引數是「觸控螢幕事件」的控制代碼,第二個引數用來設定等待超時的時間。ist執行緒執行到這個函式會等待「觸控螢幕事件」發生或者超時。當這兩種情況之一發生後,執行緒就會往下執行,並呼叫pddtouchpanelgetpoint()函式來讀取觸點座標。在「觸控螢幕事件」發生之前,超時時間會設定為無限等待。只有當「觸控螢幕事件」發生後(觸點按下)才會開始讀座標,並判斷是否還是按下狀態,如果還是按下狀態,那麼就會設定超時時間為某乙個有限值,這樣當waitforsingleobject等待時間超過這個值後又會去讀取座標。這種機制就能保證我們能讀取到觸點移動的軌跡。

當然要想使用「觸控螢幕事件」,必須要有乙個觸控螢幕的中斷(當觸點按下,這個中斷發生),並將這個中斷和「觸控螢幕事件」關聯起來,這樣中斷發生後,才會觸發「觸控螢幕事件」。

還有一種方法:不使用中斷,直接採用輪詢方式來讀取座標,通過讀取座標值的合法性來決定是否有觸點按下。這種方式下,waitforsingleobject的第乙個引數就不起作用,且第二個引數必須設為乙個有限值,這個值就決定來輪詢的頻率。

wince7 螢幕控制

在嵌入式系統中較為常用的是四線電阻式觸控螢幕,通過檢測x軸和y軸的電壓,來確定觸點的位置。一般觸控螢幕系統結構為 觸控螢幕 觸控螢幕控制器 處理器。wince7下觸控螢幕的驅動分為pdd層 位於bsp目錄中 和mdd層 位於public目錄中 pdd層和mdd層通過ddsi介面函式連線,mdd層和上...

WinCE7定時器通知

置 定時器通知 同樣使用cesetusernotificationex函式。關於cesetusernotificationex函式的使用參考 wince7使用者通知 systemtime st handle hnotify ce notification trigger nt tchar szexe...

wince6 移植 WINCE7 筆記 1

最近比較閒,一直想體會一下 wince7 的真實面紗,我使用的是 s3c2451 的 mcu,搭建 wince7 工作環境,1 安裝 vs2008 2 vs2008 sp1 3 wince7 然後使用 vs2008 轉殖乙個 armv5 的 bsp 工程,在這個框架裡面做修改,如果有乙個更好的方法,...