1、Input驅動程序是Linux輸入設備的驅動程序,分成游戲桿(joystick)、鼠標(mouse和mice)和事件設備(Event queue)3種驅動程序。其中事件驅動程序是目前通用的驅動程序,可支持鍵盤、鼠標、觸摸屏等多種輸入設備。
支持的輸入設備
2、Input驅動程序的主設備號是13,3種驅動程序的設備號分配如下所示:
joystick游戲桿:0~31
mouse鼠標:32~62
mice鼠標:63
事件設備(Event):64~95
實際上,每一種IInput設備占用5位,因此每種設備包含的個數是32個。
3、Event設備在用戶空間大多使用read、ioctl、poll等文件系統的接口進行操作,read用于讀取輸入信息,ioctl用于獲取和設置信息,poll調用可以進行用戶空間的阻塞,當內核有按鍵中斷時,通過在中斷中喚醒poll的內核實現,這樣在用戶空間poll調用也可以返回。
Event設備在文件系統中的設備節點為:/dev/input/eventX。
Input設備節點
主設備號為13,次設備號遞增生成,為64~95,各個具體的設備在misc、touchscreen、keyboard等目錄中。
4、Event輸入驅動的架構圖如下所示:
Event輸入驅動的架構圖
輸入設備驅動程序的頭文件:include/linux/input.h。
輸入設備驅動程序的核心和Event部分代碼分別是:drivers/input/input.c和drivers/input/evdev.c。
input.h中定義了struct input_dev結構,它表示Input驅動程序的各種信息,對于Event設備分為同步設備、鍵盤、相對設備(鼠標)、絕對設備(觸摸屏)等。
input_dev中定義歸納了各種設備的信息,例如按鍵,相對設備、絕對設備、雜項設備、LED、聲音設備、強制反饋設備、開關設備等。
input_dev結構體




在具體的Event驅動程序的實現中,如果得到按鍵的事件,通常需要通過以下的接口向上進行通知,這些內容也是在input.h中定義的,如下所示:






5、對不同設備內容的報告均是通過input_event()函數來完成的,選擇使用了不同參數而已。在手機系統中經常使用的鍵盤(keyboard)和小鍵盤(keypad)屬于按鍵設備EV_KEY,軌跡球屬于相對設備EV_REL,觸摸屏屬于絕對設備ABS。
關于按鍵數值的定義片段如下所示:


6、可以使用getevent對Event設備進行調試。
getevent
getevent -l
點擊鼠標,出現以上信息:第一列為設備節點,第二列為輸入設備類型,第三列為按鍵掃描碼,第四列為附加信息(按下、抬起、移動等)。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。