020 linux驅動之 輸入子系統按鍵應用

2021-10-01 17:37:35 字數 2967 閱讀 2419

(一)分配乙個輸入子系統結構體

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自帶的機制會實現上傳的功能。還有很多...