linux输入子系统
2013-12-17 16:34
459 查看
1.1.input子系统概述
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输入子系统(3)
- linux input输入子系统分析《二》:s3c2440的ADC简单驱动实例分析
- 学习笔记 --- LINUX输入子系统分析
- Linux输入子系统
- linux驱动子系统之输入子系统(1)
- linux 输入子系统之电阻式触摸屏驱动
- linux输入子系统(6)-input子系统介绍及结构图
- linux input输入子系统分析《一》:初识input输入子系统
- linux输入子系统(6)--- evdev_handler的实现
- Linux驱动子系统之输入子系统
- linux设备驱动之输入(input)子系统——核心层实现
- Linux输入子系统分析 (2) -- evdev handler初始化
- linux3.10.x的input输入子系统流程分析<一>
- [input] Linux 输入子系统(二)
- linux输入子系统(5)
- 基于 mini2440 电阻式触摸屏(三):Linux输入子系统(InputSubsystem)
- 基于Tiny4412的Linux按键输入子系统驱动的实现(二)
- Linux输入子系统-数据结构关系
- Linux输入子系统(Input Subsystem)
- 【Linux系统编程应用】 Linux输入子系统(二)