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)注册后,会将该链表添加到系统维护的一个链表中去,从而系统可以管理这个设备

input驱动12种事件类型Event types的含义的更多相关文章

  1. javascript常见的几种事件类型

    第一种事件类型:onchange() <body> <select id="sheng" onchange="fn1();"> < ...

  2. ionic3 表单输入元素input的三种事件

    1.onblur事件 onblur事件即为失去焦点时触发的事件,而所谓的焦点就是一闪一闪的光标.而ionic中onblur则为ionBlur,具体用法如下: //html<ion-input [ ...

  3. QEvent整理归纳:140种类型,29个继承类,7个函数,3种事件来源

    140种事件类型: QEvent::None QEvent::AccessibilityDescription QEvent::AccessibilityHelp QEvent::Accessibil ...

  4. 深入理解DOM节点类型第一篇——12种DOM节点类型概述

    × 目录 [1]元素 [2]特性 [3]文本[4]CDATA[5]实体引用[6]实体名称[7]处理指令[8]注释[9]文档[10]文档类型[11]文档片段[12]DTD 前面的话 DOM是javasc ...

  5. DOM事件类型详解

    一.表单事件: input事件当<input>.<textarea>的值发生变化时触发.此外,打开contenteditable属性的元素,只要值发生变化,也会触发input事 ...

  6. jQuery 的58种事件方法你都用过了吗

    jQuery 事件方法 事件方法触发或将函数附加到所选元素的事件处理程序. 下表列出了用于处理事件的所有jQuery方法. 方法 描述 bind() 在3.0版中已弃用. 请改用on()方法.将事件处 ...

  7. Android 4.0 事件输入(Event Input)系统

    参考:http://blog.csdn.net/myarrow/article/details/7091061 1. TouchScreen功能在Android4.0下不工作 原来在Android2. ...

  8. 了解HTML表单之input元素的23种type类型

    目录 传统类型 text password file radio checkbox hidden button image reset submit 新增类型 color tel email url ...

  9. HTML表单之input元素的23种type类型

    摘自:http://www.cnblogs.com/xiaohuochai/p/5179909.html 了解HTML表单之input元素的23种type类型 随着HTML5的出现,input元素新增 ...

随机推荐

  1. ActiveMQ消息传递的两种方式

    1.什么是ActiveMQ? ActiveMQ是apache提供的开源的,实现消息传递的一个中间插件,可以和spring整合,是目前最流行的开源消息总线,ActiveMQ是一个完全支持JMS1.1和J ...

  2. ctf writeup之程序员密码

    起因 在v2ex上看到有人发了一篇帖子,说做了一个程序员小游戏,遂试玩了一下. 游戏的地址在这里: http://www.bettertomissthantomeet.com/pages/level. ...

  3. Docker 内核名字空间

    Docker 容器和 LXC 容器很相似,所提供的安全特性也差不多.当用 docker run 启动一个容器时,在后台 Docker 为容器创建了一个独立的名字空间和控制组集合. 名字空间提供了最基础 ...

  4. ELK学习记录二 :elasticsearch、logstash及kibana的安装与配置

    注意事项: 1.ELK版本要求5.X以上,本人使用版本:elasticsearch-6.0.0.kibana-6.0.0-linux-x86_64.logstash-6.0.0.tar 2.Elast ...

  5. 安卓热修复之AndFIX

    我致力于最新的前沿安卓技术分析和使用教学,不打算将很多很深的东西,因为有多少人愿意沉下你的心境去学习难点?我一般只会简单提及.文字错漏在所难免还希望同学们喜欢 热修复介绍 热修复是什么? 如果你一个项 ...

  6. Maven 核心原理

    Maven 核心原理 标签 : Java基础 Maven 是每一位Java工程师每天都会接触的工具, 但据我所知其实很多人对Maven理解的并不深, 只把它当做一个依赖管理工具(下载依赖.打包), M ...

  7. J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())

    J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())   当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...

  8. syslog(),closelog()与openlog()--日志操作函数

    在典型的 LINUX 安装中,/var/log/messages 包含所有的系统消息,/var/log/mail 包含来自邮件系统的其它日志消息,/var/log/debug 可能包含调试消息.根据你 ...

  9. Swift中如何转换不同类型的Mutable指针

    在Swift中我们拥有强大高级逻辑抽象能力的同时,低级底层操作被刻意的限制了.但是有些情况下我们仍然想做一些在C语言中的hack工作,下面本猫就带大家看一看如何做这样的事. hacking is ha ...

  10. android的消息通知栏

    在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...