日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]在嵌入式系統(tǒng)中較為常用的是四線電阻式觸摸屏,通過檢測x軸和y軸的電壓,來確定觸點的位置。一般觸摸屏系統(tǒng)結(jié)構(gòu)為:觸摸屏->觸摸屏控制器->處理器。

 

在嵌入式系統(tǒng)中較為常用的是四線電阻式觸摸屏,通過檢測x軸和y軸的電壓,來確定觸點的位置。一般觸摸屏系統(tǒng)結(jié)構(gòu)為:觸摸屏->觸摸屏控制器->處理器。

wince7下觸摸屏的驅(qū)動分為PDD層(位于bsp目錄中)和MDD層(位于public目錄中)。PDD層和MDD層通過DDSI接口函數(shù)連接,MDD層和上層通過DDI函數(shù)連接。其中MDD層一般無需修改,我們只需修改PDD層的代碼。

比如我的bsp目錄下觸摸屏驅(qū)動中的touchscreenpdd.cpp文件中主要有如下函數(shù):

TchPdd_Init()

TchPdd_Ioctl()

PDDTouchIST()

PDDInitializeHardware()

PDDTouchPanelEnable()

PDDTouchPanelGetPoint()

PDDCalibrationThread()

PDDStartCalibrationThread()

PDDDeInitailzeHardware()

PDDTouchPanelDisable()

其中TchPdd開頭的函數(shù)就是DDSI函數(shù),PDD開頭的函數(shù)就是PDD層的函數(shù)。MDD層會最先調(diào)用TchPdd_Init()函數(shù),該函數(shù)會將DDSI函數(shù)以函數(shù)指針的形式傳遞給MDD層,并調(diào)用PDD層的函數(shù)進行必要的初始化,如調(diào)用PDDInitializeHardware()來初始化SPI,GPIO(我的觸摸屏控制器使用SPI接口),調(diào)用PDDTouchPanelEnable()來創(chuàng)建“觸摸屏事件”,創(chuàng)建IST線程等。

IST線程函數(shù)PDDTouchIST()中會有一個while循環(huán),如下圖所示:


循環(huán)中有一個WaitForSingleObject(,)函數(shù)。該函數(shù)有兩個參數(shù),第一個參數(shù)是“觸摸屏事件”的句柄,第二個參數(shù)用來設(shè)置等待超時的時間。IST線程執(zhí)行到這個函數(shù)會等待“觸摸屏事件”發(fā)生或者超時。當這兩種情況之一發(fā)生后,線程就會往下執(zhí)行,并調(diào)用PDDTouchPanelGetPoint()函數(shù)來讀取觸點坐標。在“觸摸屏事件”發(fā)生之前,超時時間會設(shè)置為無限等待。只有當“觸摸屏事件”發(fā)生后(觸點按下)才會開始讀坐標,并判斷是否還是按下狀態(tài),如果還是按下狀態(tài),那么就會設(shè)置超時時間為某一個有限值,這樣當WaitForSingleObject等待時間超過這個值后又會去讀取坐標。這種機制就能保證我們能讀取到觸點移動的軌跡。

當然要想使用“觸摸屏事件”,必須要有一個觸摸屏的中斷(當觸點按下,這個中斷發(fā)生),并將這個中斷和“觸摸屏事件”關(guān)聯(lián)起來,這樣中斷發(fā)生后,才會觸發(fā)“觸摸屏事件”。

還有一種方法:不使用中斷,直接采用輪詢方式來讀取坐標,通過讀取坐標值的合法性來決定是否有觸點按下。這種方式下,WaitForSingleObject的第一個參數(shù)就不起作用,且第二個參數(shù)必須設(shè)為一個有限值,這個值就決定來輪詢的頻率。

 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉