1.2. input子系統結構圖
input子系統結構圖如下圖1所示:
圖1 輸入子系統結構圖
1.3.linux中輸入裝置驅動的分層
linux中輸入裝置驅動的分層如下圖2所示:
圖2 linux中輸入裝置的分層
1.4. 輸入子系統裝置驅動層實現原理
在linux中,input裝置用input_dev結構體描述,定義在input.h中。裝置的驅動只需按照如下步驟就可實現了。
1).在驅動模組載入函式中設定input裝置支援input子系統的哪些事件;
2).將input裝置註冊到input子系統中;
3).在input裝置發生輸入操作時(如:鍵盤被按下/抬起、觸控螢幕被觸控/抬起/移動、滑鼠被移動/單擊/抬起時等),提交所發生的事件及對應的鍵值/座標等狀態。
1.5.軟體設計流程
軟體設計流程如下圖3所示
圖 3 input子系統軟體設計流程
1.6.與軟體設計有關的api函式
1.6.1.分配乙個輸入裝置
struct input_dev *input_allocate_device*(void);
1.6.2.註冊乙個輸入裝置
int input_register_device(struct input_dev *dev);
1.6.3.驅動實現-事件支援
set_bit告訴inout子系統它支援哪些事件
set_bit(ev_key,button_dev.evbit)
struct input_dev中有兩個成員,乙個是evbit;乙個是keybit.分別用來表示裝置所支援的事件型別和按鍵型別。
1.6.3.1事件型別
linux中輸入裝置的事件型別有(這裡只列出了常用的一些,更多請看linux/input.h中):ev_syn 0x00 同步事件
ev_key 0x01 按鍵事件
ev_rel 0x02 相對座標
ev_abs 0x03 絕對座標
ev_msc 0x04 其它
ev_led 0x11 led
ev_snd 0x12 聲音
ev_rep 0x14 repeat
ev_ff 0x15 力反饋
1.6.4.驅動實現-報告事件
void input_event(struct input_dev *dev,unsigned int type,unsigned int code,int value);//報告指定type,code的輸入事件
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);//報告絕對座標
void input_sync(struct input_dev *dev);//報告同步事件
在觸控螢幕驅動設計中,一次座標及按下狀態的整個報告過程如下:
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(struct input_dev *dev);//同步
1.6.5釋放與登出裝置
void input_free_device(struct input_dev *dev);
void input_unregister_device(struct input_dev *);
Linux輸入子系統
1.1.input子系統概述 輸入裝置 如按鍵,鍵盤,觸控螢幕,滑鼠等 是典型的字元裝置,其一般的工作機制是低層在按鍵,觸控等動作發生時產生乙個中斷 或驅動通過timer定時查詢 然後cpu通過spi,i2c或者外部儲存器匯流排讀取鍵值,座標等資料,放乙個緩衝區,字元裝置驅動管理該緩衝區,而驅動的r...
Linux輸入子系統
linux系統提供了input子系統,按鍵 觸控螢幕 鍵盤 滑鼠等輸入都可以利用input介面函式來實現裝置驅動,最重要的資料結構是struct input dev 在linux 核心中,input裝置用input dev 結構 體描述,使用input子系統實現輸入裝置驅動的時候,驅動的核心工作是向...
Linux輸入子系統
位址 linux輸入子系統 按鍵與觸控螢幕的裝置驅動,在linux系統中實現這類裝置驅動的方法是利用input子系統。linux系統提供了input子系統,按鍵 觸控螢幕 鍵盤 滑鼠等輸入都可以利用input介面函式來實現裝置驅動,按鍵和觸控螢幕裝置驅動都可以作為input裝置驅動而實現。在linu...