转自:http://book.51cto.com/art/201304/390529.htm

在Linux系统中,所有的输入设备(键盘、鼠标、触摸屏)都使用统一的输入系统进行管理。每个/dev/input/eventX都对应着一个输入设备。这些输入设备可以通过对应的/sys/class/ input/inputX/name文件查询到对应的设备名称。在/proc/bus/input/devices中有所有设备的详细信息。

当应用程序打开/dev/input/eventX设备后,可以使用read函数实现输入事件的读取。在linux/input.h中定义了输入事件的结构体:

 
 
  1. struct input_event {  
  2. struct timeval time;  //时间戳  
  3. __u16 type;   //事件类型  
  4. __u16 code;   //事件代码  
  5. __s32 value;   //事件的值  
  6. }; 

表4-14中介绍了事件类型的定义及含义,触摸屏使用的事件类型为EV_ABS。

表4-14  事件类型定义

事 件 类 型 含    义 事 件 类 型 含    义
EV_SYN
同步时间
EV_LED
LED
EV_KEY
按键事件
EV_SND
声音
EV_REL
相对坐标(鼠标)
EV_REP
重复
EV_ABS
绝对坐标(触摸屏)
EV_FF
力反馈
EV_MSC
其他
EV_PWR
电源键

事件代码的含义也不同,见表4-15。

表4-15  事件代码的含义

事件类型 事件代码的含义
EV_KEY
键值
EV_REL
轨迹类型(X轴方向或Y轴方向)
EV_ABS
坐标类型(X轴坐标或Y轴坐标)

事件值的含义见表4-16。

表4-16  事件值的含义

事件类型 事件值的含义
EV_KEY
1表示按键按下;0表示按键抬起
EV_REL
鼠标偏移量(X轴偏移或Y轴偏移)
EV_ABS
坐标值(X轴坐标或Y轴坐标)

在Linux的GUI系统中,会利用上述接口对所有的输入设备进行管理。应用程序可以通过在GUI中注册监听器、在消息队列中增加对应事件的处理函数,完成输入设备事件的处理。

应用程序也可以通过write函数,向设备写入input_event事件,实现对输入设备事件的模拟。

Logo

更多推荐