首页 >> 知识 >> Linux input 子系统详解

Linux input 子系统详解

1.模块概述1.1.相关资料和代码研究drivers/input/include/uapi/linux/input-event-codes.h2.模块功能

linux核心的输入框架

3.模块学习3.1.概述

Linux输入设备种类繁杂,常见的包括触摸屏、键盘、鼠标、摇杆等;这些输入设备属于字符设备,而linux将这些设备的共同特性抽象出来,Linux input 子系统就产生了。

3.2.软件架构

输入子系统是由设备驱动层(input driver)、输入核心层(input core)、输入事件处理层(input event handle)组成,具体架构如图4.1所示:

(1)input设备驱动层:负责具体的硬件设备,将底层的硬件输入转化为统一的事件形式,向input核心层和汇报;*(2)input核心层:连接input设备驱动层与input事件处理层,向下提供驱动层的接口,向上提供事件处理层的接口;*(3)input事件处理层:为不同硬件类型提供了用户访问以及处理接口,将硬件驱动层传来的事件报告给用户程序。

在input子系统中,每个事件的发生都使用事件(type)->子事件(code)->值(value)所有的输入设备的主设备号都是13,input-core通过次设备来将输入设备进行分类,如0-31是游戏杆,32-63是鼠标(对应Mouse Handler)、64-95是事件设备(如触摸屏,对应Event Handler)。

Linux输入子系统支持的数据类型

时间类型编码含义EV_SYN0x00同步事件EV_KEY0x01按键事件(鼠标,键盘等)EV_REL0x02相对坐标(如:鼠标移动,报告相对最后一次位置的偏移)EV_ABS0x03绝对坐标(如:触摸屏或操作杆,报告绝对的坐标位置)EV_MSC0x04其它EV_SW0x05开关EV_LED0x11按键/设备灯EV_SND0x12声音/警报EV_REP0x14重复EV_FF0x15力反馈EV_PWR0x16电源EV_FF_STATUS0x17力反馈状态EV_MAX0x1f事件类型最大个数和提供位掩码支持

定义的按键值

#define KEY_RESERVED 0#define KEY_ESC 1#define KEY_1 2#define KEY_2 3#define KEY_3 4#define KEY_4 5#define KEY_5 6#define KEY_6 7#define KEY_7 8#define KEY_8 9#define KEY_9 10#define KEY_0 11...3.3.数据结构

三个数据结构input_dev,input_handle,input_handler之间的关系如图4.2、4.3所示

input_dev:是硬件驱动层,代表一个input设备。input_handler:是事件处理层,代表一个事件处理器。input_handle:属于核心层,代表一个配对的input设备与input事件处理器。input_dev 通过全局的input_dev_list
网站地图