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
點擊鼠標,出現以上信息:第一列為設備節點,第二列為輸入設備類型,第三列為按鍵掃描碼,第四列為附加信息(按下、抬起、移動等)。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/274604.html
微信掃一掃
支付寶掃一掃