input驱动12种事件类型Event types的含义
?最近在做linux2.6的鍵盤驅(qū)動程序的工作,接觸到了input subsystem這一概念,現(xiàn)把我對其中相關(guān)結(jié)構(gòu)體的理解寫出來。如果我的理解有錯誤,希望大家指正,謝謝! 1.input_dev
說明:輸入子系統(tǒng)(input subsystem)的驅(qū)動層的核心結(jié)構(gòu)。
頭文件:include/linux/input.h
成員說明:
void *private;
???????//不清楚。
char *name;
???????//設(shè)備名字,如鍵盤名字。
char *phys;
???????//設(shè)備文件節(jié)點名,如input/kbd0。
char *uniq;
???????//全球唯一的ID號。
struct input_id id;
???????//后文作詳細(xì)介紹。
unsigned long evbit[NBITS(EV_MAX);]
???????//該設(shè)備驅(qū)動所能支持的事件。
???????//EV_SYN??????同步事件
???????//EV_KEY???????鍵盤事件
???????//EV_REL???????相對坐標(biāo)事件,用于鼠標(biāo)
???????//EV_ABS???????絕對坐標(biāo)事件,用于搖桿
???????//EV_MSC??????其他事件
???????//EV_LED???????LED燈事件
???????//EV_SND??????聲音事件
???????//EV_REP???????重復(fù)按鍵事件
???????//EV_FF?????????受力事件
???????//EV_PWR??????電源事件
???????//EV_FF_STATUS??受力狀態(tài)事件
unsigned long keybit[NBITS(KEY_MAX)];
???????//鍵值存放表
unsigned long relbit[NBITS(REL_MAX)];
???????//用于存放相對坐標(biāo)值等
unsigned long absbit[NBITS(ABS_MAX)];
???????//用于存放絕對坐標(biāo)值等
unsigned long mscbit[NBITS(MSC_MAX)];
???????//存放其他事件類型
unsigned long ledbit[NBITS(LED_MAX)];
???????//存放表示各種狀態(tài)的LED值
unsigned long sndbit[NBITS(SND_MAX)];
???????//存放各種事件的聲音
unsigned long ffbit[NBITS(FF_MAX)];
???????//存放受力設(shè)備的屬性
int ff_effects_max;
???????//顯然與受力效果有關(guān),具體作用還不大清楚。
unsigned int keycodemax;
unsigned int keycodesize;
void * keycode;
???????//這三個不是很清楚,有點模糊理解。
unsigned int repeat_key;
???????//存放重復(fù)按鍵時的鍵值
struct timer_list timer;
???????//定時器
struct pm_dev *pm_dev;
???????//考慮到有些設(shè)備可能有電源管理
struct pt_regs *regs;
???????//不清楚
int state;
???????//顯然是表示一個狀態(tài),但不清楚具體是誰的狀態(tài)
int sync;
???????//具體用于什么也不大清楚
int abs[ABS_MAX + 1];
???????//顯然是與絕對坐標(biāo)有關(guān)的,但具體的作用不清楚。
int rep[REP_MAX + 1];
???????//存放重復(fù)按鍵時的延時,系統(tǒng)依靠這個延時時間來判斷重復(fù)按鍵
???????//rep[0]表示開始要重復(fù)按鍵時的延時時間,即第1個鍵與第2個鍵(開始重復(fù)按鍵)之間的延時
???????//rep[1]此后重復(fù)按鍵之前的延時時間,直到按鍵抬起
???????//通俗解釋就是,假如我按了一個“a”,并且一直按著,那么在顯示出來的第一個a與第二個a之間的時間延時為rep[0],而此后的相鄰兩個a之間的延時為rep[1]
??
unsigned long key[NBITS(KEY_MAX)];
unsigned long led[NBITS(LED_MAX)];
unsigned long snd[NBITS(SND_MAX)];
???????//不知道有什么用
int absmax[ABS_MAX + 1];
int absmin[ABS_MAX + 1];
int absfuzz[ABS_MAX + 1];
int absflat[ABS_MAX + 1];
???????//顯然與絕對坐標(biāo)值有關(guān),但不知道具體作用
?
int (*open)(struct input_dev *dev);
void (*close)(struct input_dev *dev);
int (*accept)(struct input_dev *dev, struct file *file);
int (*flush)(struct input_dev *dev, struct file *file);
int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
int (*erase_effect)(struct input_dev *dev, int effect_id);
???????//底層與硬件相關(guān)的一組操作,若有具體定義,則會在input core層被調(diào)用,具體看input.c。
?
struct input_handle *grab;
???????//該結(jié)構(gòu)會在后文做具體介紹,這個指針用于占用輸入設(shè)備用,如鍵盤
struct list_head h_list;
struct list_head node;
???????//h_list鏈表用于與input_handler相聯(lián)系
???????//node鏈表:設(shè)備向輸入子系統(tǒng)(input subsystem)注冊后,會將該鏈表添加到系統(tǒng)維護(hù)的一個鏈表中去,從而系統(tǒng)可以管理這個設(shè)備
總結(jié)
以上是生活随笔為你收集整理的input驱动12种事件类型Event types的含义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设备驱动--中断开关执行的匹配
- 下一篇: 如何办理夫妻间的房屋产权转移手续?