2021-05-12 14:32:11
linux中input子系統如何設定多個按鍵
linux中input子系統如何設定多個按鍵
1
1.裝置驅動入口函數
在裝置驅動入口函數中我們需要做的事:(1)分配一個input_dev 結構體
(2)設定這個input_dev 結構體
(3)呼叫input_register_device註冊這個input_dev
(4)完成硬體相關操作:如註冊中斷處理常式,新增定時器等
2
2.在初始化iinput_dev結構體過程
主要對其中的如下陣列做了初始化,從而來確定該裝置支援哪些事件,支援哪些操作。
3
3.
初始化時首先要確定裝置能夠產生哪一類事件
事件的型別如下:
4
4.
事件型別的設定主要對evbit[]陣列中的相應位做設定: set_bit(EV_KEY, button_dev->evbit);
然後再確定裝置支援該類事件下的哪些操作
例如:在相對坐標事件下可以支援如下操作
5
5.在本次按鍵驅動程式中按鍵裝置產生的事件自然是按鍵事件,按鍵事件支援KEY_L、KEY_S、KEY_ENTER、KEY_LEFTSHIFT 4個操作,分別對應 L ,S, enter,shift
6
6.
註冊輸入裝置input_register_device()
這個函數在上一篇部落格中已經做了簡要分析,這裡在提一下input_register_device()中做了哪些事
(1) 設定同步事件、清除KEY_RESERVED、清除bitmasks中沒有提到的位
(2) 初始化定時器,確定定時器的處理常式。這裡定時器與重複上報事件有關,注意在事件型別中有EV_REP事件,設定這個事件在ev_bit中的相應位,就可以重複上報事件。
(3) 設定getkeycode 和 setkeycode 函數
(4) device_add, input_dev包含的device結構註冊到Linux裝置模型中,在sysfs檔案系統中可以看到增加了裝置input1
7
7. 中斷處理常式
8
8.input_event 上報事件函數
9
9.button_dev 和 kbd_handler 的匹配過程
10
10.kbd->event 函數
11
11.
實驗效果
3.1 執行hexdump /dev/input/event0
依次按下 l s enter 對應的按鍵:l 對應0x26 s 對應0x1f enter對應0x1c
相關文章