首頁 > 軟體

linux中input子系統如何設定多個按鍵

2019-12-17 02:55:43

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  




IT145.com E-mail:sddin#qq.com