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