輸入子系統:
對不同的輸入設備進行統一處理的設備驅動程序框架,包括鍵盤,鼠標,觸摸屏等任何的輸入設備都可以通過輸入子系統的接口註冊到內核中。使用它的好處:
它提供了用於分發輸入報告給用戶程序的簡單事件(envent)的接口,抽取出了輸入驅動程序的通用部分,簡化了驅動程序,引入了一致性.簡便了設備驅動程序的開發。
輸入子系統的三層結構: 核心層,具體設備相關的設備層dev和與設備處理的驅動drv層。
input_dev 是硬件驅動層,代表一個input設備
input_handler 是事件處理層,代表一個事件處理器
input_handle 核心層,代表一個配對的input設備與input事件處理函數
輸入子系統程序的編寫步驟:
1: 分配一個輸入設備即input_dev結構體:
聲明:static struct input_dev *buttons_dev;
buttons_dev= input_allocate_device();
必要的判斷:
if (!buttons_dev)
{
printk("Bad input_allocate_device()\n");
return ENOMEM;
}
2: 支持的輸入事件的相關設置
在source insight裏面查找input_dev可得到這個結構體的定義:
/*a:產生那類事件*/
set_bit(EV_KEY,buttons_dev->evbit);
產生按鍵類事件
set_bit(EV_REP, buttons_dev->evbit);產生重複性事件
/*b:產生類裏面的哪些事件L,S,ENTER, LEFTSHIT*/
set_bit(KEY_L, buttons_dev->keybit);
set_bit(KEY_S, buttons_dev->keybit);
set_bit(KEY_ENTER, buttons_dev->keybit);
set_bit(KEY_LEFTSHIFT, buttons_dev->keybit);
3:分配一個輸入設備
input_register_device(buttons_dev);
4:硬件相關的初始化:
。。。。
5:上報事件:
input_event(buttons_dev,EV_KEY,pindesc->key_val, 0);
input_sync(buttons_dev); 表示此事件已經完成。
6 在出口函數裏面釋放和註銷相應的設備:
input_unregister_device(buttons_dev);
input_free_device(buttons_dev);