input驱动12种事件类型Event types的含义
2016-04-16 11:08
435 查看
linux2.6 input subsystem中部分相关结构体的分析
最近在做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)注册后,会将该链表添加到系统维护的一个链表中去,从而系统可以管理这个设备
最近在做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)注册后,会将该链表添加到系统维护的一个链表中去,从而系统可以管理这个设备
相关文章推荐
- Leetcode题解14 27. Remove Element
- Android 中屏幕常亮功能
- input驱动12种事件类型Event types的含义
- position与z-index的组合
- bochs调试
- Java读取文件
- codevs 1082 线段树练习 3 区间更新+延迟标记
- KVO,NSNotification,delegate及block区别?
- 263. Ugly Number
- 个人总结面试题
- Educational Codeforces Round 8 F. Bear and Fair Set【最大流】
- Java算法---整数与IP地址间的转换
- Porting an Angular 2.0 App to Aurelia
- IOS学习之——ViewController之间双向传值(反向为代理模式)
- 求数组中最长递增子序列
- Code Forces 21 A(模拟)
- NSRunLoop详解
- Code Forces 21 A(模拟)
- JVM学习笔记三:JVM类加载机制
- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:31:compile (default-co