linux輸入子系統

2021-06-19 18:10:13 字數 1956 閱讀 6009

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...