Linux-C下的输入事件分析
linux输入子系统协议用类型types和编码codecs来表示输入设备的值并用此来通知用户空间.
结构体input_event
input_event
是其中最重要的结构体,该结构体记录了输入事件的所有信息.定义在文件linux/input.h
中
1
2
3
4
5
6
7
struct input_event
{
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
time
表示事件发生的时间type
表示事件的类型code
表示事件的编码value
表示事件的参数值
evnet type
定义了输入事件的类型.例如常见的EV_KEY
,按键输入
EV_SYN
: 事件间的分割标志。事件可能按时间或空间进行分割EV_KEY
: 描述键盘,按键或者类似键盘设备的状态变化EV_REL
: 描述相对坐标轴上数值的变化EV_ABS
: 描述相对坐标轴上数值的变化EV_MSC
: 当不能匹配现有的类型时,使用该类型进行描述EV_SW
: 描述具备两种状态的输入开关EV_LED
: 控制设备上的LED灯的开和关EV_SND
: 用来给设备输出提示声音EV_REP
: 用于可以自动重复的设备(autorepeating) 10.EV_FF
: 给输入设备发送强制回馈命令 11.EV_PWR
: 特别用于电源开关的输入 12.EV_FF_STATUS
: 接收设备的强制反馈状态。
所有的event type
都定义在include/uapi/linux/input-event-codes.h
event code
对Event tpye
定义的类型进行更详细的定义.以键盘为例,
当type
=EV_KEY
时, code
=KEY_A`代表了键盘上的A发生了输入事件.
所有event type
的详细定义都在include/uapi/linux/input-event-codes.h
value
value
就是事件发生时所带的的参数值. 以键盘为例
value
=0
表示按键按下value
=1
表示按键松开value
=2
表示按键自动重复
issues
如果有疑惑或错误,请提issues –> Issues If there are doubts or errors, please submit an issue –> Issues