linux 系統提供了input子系統,按鍵、觸控螢幕、鍵盤、滑鼠等輸入都可以利用input介面函式來實現裝置驅動,因此,12.1~12.2節的按鍵和觸控螢幕裝置驅動都可以作為input裝置驅動而實現。
在linux 核心中,input裝置用input_dev 結構 體描述,使用input子系統實現輸入裝置驅動的時候,驅動的核心工作是向系統報告按鍵、觸控螢幕、鍵盤、滑鼠等輸入事件(event,通過input_event結構 體描述),不再需要關心檔案操作介面,因為input子系統已經完成了檔案操作介面。驅動報告的事件經過inputcore和 eventhandler最終到達使用者空間。
通過input子系統,具體的輸入裝置驅動只需要完成如下工作。
l 在模組載入函式中告知input子系統它可以報告的事件。
裝置驅動通過set_bit()告訴input子系統它支援哪些事件,如下所示:
set_bit(ev_key, button_dev.evbit);
l 在模組載入函式中註冊輸入裝置。
註冊輸入裝置的函式為:
int input_register_device(struct input_dev
*dev);
l 在鍵被按下/抬起、觸控螢幕被觸控/抬起/移動、滑鼠被移動/單擊/抬起時通過input_ report_***()報告發生的事件及對應的鍵值/座標等狀態。
主要的事件型別包括ev_key(按鍵事件)、ev_rel(相對值,如游標移動,報告的是相對最後一次位置的偏移)和ev_abs(絕對值,如觸控螢幕和操縱桿,它們工作在絕對座標系統)。
用於報告ev_key、ev_rel和ev_abs事件的函式分別為:
void input_report_key(struct input_dev
*dev, unsigned int code, int value);
void input_report_rel(struct input_dev
*dev, unsigned int code, int value);
void input_report_abs(struct input_dev
*dev, unsigned int code, int value);
input_sync()用於事件同步,它告知事件的接收者驅動已經發出了乙個完整的報告。
例如,在觸控螢幕裝置驅動中,一次座標及按下狀態的整個報告過程如下:
input_report_abs(input_dev
, abs_x, x); //x座標
input_report_abs(input_dev
, abs_y, y); //y座標
input_report_abs(input_dev
, abs_pressure, pres); //壓力
input_sync(input_dev
); //同步
在模組解除安裝函式中登出輸入裝置。登出輸入裝置的函式為:
void input_unregister_device(struct input_dev
*dev);
**清單12.28給出了乙個最簡單的使用input介面實現按鍵裝置驅動的範例,它在中斷服務程式中向系統報告按鍵及同步事件。
**清單12.28 最簡單的input裝置驅動
1 /*在按鍵中斷中報告事件*/
2 static void button_interrupt(int irq, void *dummy, struct pt_regs *fp)
3 7
8 static int _ _init button_init(void)
9 16
17 button_dev.evbit[0] = bit(ev_key); //支援ev_key事件
18 button_dev.keybit[long(btn_0)] = bit(btn_0);
19 20 input_register_device(&button_dev); //註冊input裝置
21 }
22 23 static void _ _exit button_exit(void)
24 本篇文章**於:開發學院
/2010/0701/23935.php
linux驅動 Input 輸入子系統
1,哪些驅動裝置使用驅動子系統更方便簡單?像按鍵,觸控螢幕,滑鼠等輸入裝置我們可以採用input介面函式來實現裝置驅動,那麼採用input輸入子系統有什麼優點?其實一句話,採用input輸入子系統可以使驅動程式變得異常簡單。2,input輸入子系統的體系結構 主要包括三大體系結構 裝置驅動層driv...
Linux裝置驅動 input輸入子系統
不同的輸入裝置 如按鍵 鍵盤 觸控螢幕 滑鼠等 都有它們的差異性 如中斷 讀鍵值 座標值是裝置相關的 及共同性 如輸入事件的緩衝區管理以及字元裝置驅動的file operations介面則對輸入裝置是通用的 因此在linux核心中設計了input輸入子系統來完成輸入裝置之間的共性工作,而我們只需要使...
Linux驅動之input輸入子系統
input輸入子系統在實際專案中用的也比較多,按鍵,觸控螢幕,滑鼠,鍵盤等,用來實現核心層和應用層資料之間的傳遞,這裡得說明不只有input,還有copy to user等,利用input的好處是我們用自己上傳資料到應用程式,我們直接上報這個事件發生了,input自帶的機制會實現上傳的功能。還有很多...