正文

8.2.1 input驅(qū)動(dòng)程序

Android系統(tǒng)級(jí)深入開(kāi)發(fā):移植與調(diào)試 作者:韓超


Input驅(qū)動(dòng)程序是Linux輸入設(shè)備的驅(qū)動(dòng)程序,分成游戲桿(joystick)、鼠標(biāo)(mouse和mice)和事件設(shè)備(Event queue)3種驅(qū)動(dòng)程序。其中事件驅(qū)動(dòng)程序是目前通用的驅(qū)動(dòng)程序,可支持鍵盤、鼠標(biāo)、觸摸屏等多種輸入設(shè)備。

Input驅(qū)動(dòng)程序的主設(shè)備號(hào)是13,3種驅(qū)動(dòng)程序的設(shè)備號(hào)分配如下所示。

  joystick游戲桿:0~31

  mouse鼠標(biāo):32~62

  mice鼠標(biāo):63

 事件(Event)設(shè)備:64~95

實(shí)際上,每一種Input設(shè)備占用5位,因此每種設(shè)備包含的個(gè)數(shù)是32個(gè)。

Event設(shè)備在用戶空間大多使用read、ioctl、poll等文件系統(tǒng)的接口進(jìn)行操作,read用于讀取輸入信息,ioctl用于獲得和設(shè)置信息,poll調(diào)用可以進(jìn)行用戶空間的阻塞,當(dāng)內(nèi)核有按鍵等中斷時(shí),通過(guò)在中斷中喚醒poll的內(nèi)核實(shí)現(xiàn),這樣在用戶空間的poll調(diào)用也可以返回。

Event設(shè)備在文件系統(tǒng)中的設(shè)備節(jié)點(diǎn)為:/dev/input/eventX。

主設(shè)備號(hào)為13,次設(shè)備號(hào)遞增生成,為64~95,各個(gè)具體的設(shè)備在misc、touchscreen,keyboard等目錄中。

Event輸入驅(qū)動(dòng)的架構(gòu)如圖8-3所示。

輸入設(shè)備驅(qū)動(dòng)程序的頭文件:include/linux/input.h。

輸入設(shè)備驅(qū)動(dòng)程序的核心和Event部分代碼分別是:drivers/input/input.c和drivers/input/ evdev.c。

 

input.h中定義了struct input_dev結(jié)構(gòu),它表示Input驅(qū)動(dòng)程序的各種信息,對(duì)于Event設(shè)備分為同步設(shè)備、鍵盤、相對(duì)設(shè)備(鼠標(biāo))、絕對(duì)設(shè)備(觸摸屏)等。

input_dev中定義并歸納了各種設(shè)備的信息,例如按鍵、相對(duì)設(shè)備、絕對(duì)設(shè)備、雜項(xiàng)設(shè)備、LED、聲音設(shè)備,強(qiáng)制反饋設(shè)備、開(kāi)關(guān)設(shè)備等。

在具體的Event驅(qū)動(dòng)程序的實(shí)現(xiàn)中,如果得到按鍵的事件,通常需要通過(guò)以下的接口向上進(jìn)行通知,這些內(nèi)容也在input.h中定義如下所示:

事實(shí)上,對(duì)不同設(shè)備內(nèi)容的報(bào)告均是通過(guò)input_event()函數(shù)來(lái)完成的,選擇使用了不同參數(shù)而已。

在手機(jī)系統(tǒng)中經(jīng)常使用的鍵盤(keyboard)和小鍵盤(kaypad)屬于按鍵設(shè)備EV_KEY,軌跡球?qū)儆谙鄬?duì)設(shè)備EV_REL,觸摸屏屬于絕對(duì)設(shè)備EV_ABS。

關(guān)于按鍵數(shù)值的定義的片斷如下所示:

可以使用getevent對(duì)Event設(shè)備進(jìn)行調(diào)試,在Android的模擬器環(huán)境中,使用getevent的情況如下所示:

點(diǎn)擊數(shù)字按鍵1,出現(xiàn)了上面的信息,0002是按鍵的掃描碼,00000001和00000000分別是按下和抬起的附加信息。最前面的0001實(shí)際上是輸入設(shè)備的類型。

使用getevent可以最直接地獲得按鍵的掃描碼,對(duì)于Android系統(tǒng)中用戶輸入設(shè)備的調(diào)試,可以從源頭確定底層輸入設(shè)備傳遞上來(lái)的信息。

 


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) www.dappsexplained.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)