(一)分配乙個輸入子系統結構體
static
struct input_dev *buttons_dev;
/*分配乙個input_dev結構體*/
(二)設定這個輸入子系統需要的動作
/* 1. 分配乙個input_dev結構體 */
buttons_dev =
input_allocate_device()
;;/*使用這個函式分配乙個input_dev結構體*/
/* unsigned long evbit [nbits(ev_max)]; // 表示能產生哪類事件
unsigned long keybit[nbits(key_max)]; // 表示能產生哪些按鍵
unsigned long relbit[nbits(rel_max)]; // 表示能產生哪些相對位移事件, x,y,滾輪
unsigned long absbit[nbits(abs_max)]; // 表示能產生哪些絕對位移事件, x,y
*//* 2. 設定 */
/* 2.1 能產生哪類事件 */
/*按鍵類事件 buttons_dev裡面的哪一類事件*/
set_bit
(ev_key, buttons_dev->evbit)
;/*能夠產生重複類事件,就是按鍵按下可以重複輸出*/
set_bit
(ev_rep, buttons_dev->evbit)
;/* 2.2 能產生這類操作裡的哪些事件: l,s,enter,left**** */
set_bit
(key_l, buttons_dev->keybit)
;/*l*/
set_bit
(key_s, buttons_dev->keybit)
;/*s*/
set_bit
(key_enter, buttons_dev->keybit)
;/*回車*/
set_bit
(key_leftshift, buttons_dev->keybit)
;/*shift*/
/* 3. 註冊 */
input_register_device
(buttons_dev)
;/*初始化完成上面的引數之後進行初始化*/
(三)當有動作產生時候,上報事件
/*上報事件*/
/*上報給哪個結構體 上報什麼事件 上報值 值*/
input_event
(buttons_dev, ev_key, pindesc->key_val,0)
;input_sync
(buttons_dev)
;/*上報同步事件,表示上面的事件已經上報完成*/
(四)刪除這個字輸入系統結構體
input_unregister_device
(buttons_dev)
;input_free_device
(buttons_dev)
;
(五)示例,按鍵輸入子系統全部**(詳解)
/* 參考drivers\input\keyboard\gpio_keys.c */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct pin_desc
;struct pin_desc pins_desc[4]
=,,,
,};static
struct input_dev *buttons_dev;
/*分配乙個input_dev結構體*/
static
struct pin_desc *irq_pd;
static
struct timer_list buttons_timer;
/*定時器結構體*/
static irqreturn_t buttons_irq
(int irq,
void
*dev_id)
/*按鍵中斷處理函式*/
static
void
buttons_timer_function
(unsigned
long data)
/*定時器超時處理函式*/
else
}static
intbuttons_init
(void
)return0;
}static
void
buttons_exit
(void
)del_timer
(&buttons_timer)
;/*刪除定時器結構體*/
linux驅動之輸入子系統
輸入子系統框架,把核心開啟 搜尋input.c 輸入子系統的 在 driver input目錄下面 最上一層,我們稱它為核心層 要看乙個驅動程式我們應該從他的入口函式開始看 有一行 err register chrdev region mkdev input major,0 input max ch...
linux輸入子系統之按鍵驅動
上一節中,我們講解了linux input子系統的框架,到核心原始碼裡詳細分析了輸入子系統的分離分層的框架等。這一節,我們來以輸入子系統的框架來寫乙個按鍵驅動。問 怎麼寫符合輸入子系統框架的驅動程式?答 1.分配乙個input dev結構體 2.設定 3.註冊 4.硬體相關的 比如在中斷服務程式裡上...
Linux驅動之input輸入子系統
input輸入子系統在實際專案中用的也比較多,按鍵,觸控螢幕,滑鼠,鍵盤等,用來實現核心層和應用層資料之間的傳遞,這裡得說明不只有input,還有copy to user等,利用input的好處是我們用自己上傳資料到應用程式,我們直接上報這個事件發生了,input自帶的機制會實現上傳的功能。還有很多...