Android中getevent和setevent的应用

进入shell,以触摸屏为例,执行getevent -p /dev/input/event1,输出如下:
add device 1: /dev/input/event1
  name:     "MSG21XX Touchscreen"
  events:
    KEY (0001): 008b  009e  00ac  00d9
    ABS (0003): 002f  : value 0, min 0, max 1, fuzz 0, flat 0, resolution 0
                0030  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
                0032  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
                0035  : value 0, min 0, max 720, fuzz 0, flat 0, resolution 0
                0036  : value 0, min 0, max 1280, fuzz 0, flat 0, resolution 0
                0039  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
  input props:
    INPUT_PROP_DIRECT
表明/dev/event0能产生按键类事件和绝对位移类事件。8b,9e,ac,d9转换成10进制分别是139,158,172,217,分别代表菜单键,返回键,主页键,搜索键。在kernel/include/uapi/linux/input.h中定义如下:
#define KEY_MENU        139    /* Menu (show menu) */
#define KEY_BACK        158    /* AC Back */
#define KEY_HOMEPAGE        172    /* AC Home */
#define KEY_SEARCH        217

对触摸屏采用getevent读取触摸数据,输出如下:
root@msm8909:/ # getevent /dev/input/event1                                    
0001 00ac 00000001
0000 0000 00000000
0001 00ac 00000000
0000 0000 00000000

驱动程序通过input_event函数上报触摸结果,最终会调用kernel/drivers/input/evdev.c中的evdev_event函数:
static void evdev_event(struct input_handle *handle,
			unsigned int type, unsigned int code, int value)
{
	struct input_value vals[] = { { type, code, value } };

	evdev_events(handle, vals, 1);
}
所以,弄清楚了struct input_value中每个成员的含义,也就弄清楚了getevent输出结果的含义,该结构体在kernel/include/linux/input.h中定义:
struct input_value {
	__u16 type;
	__u16 code;
	__s32 value;
};
所以getevent输出结果的含义如下:
按键事件 HOME键     按下
0001          00ac      00000001
-------------同步事件-------------
0000          0000      00000000
按键事件  HOME键    松开
0001          00ac      00000000
-------------同步事件-------------
0000          0000      00000000


在shell下输入如下命令,效果相当于触摸屏的Home键被按下再被松开松开的效果:
root@msm8909:/ # sendevent /dev/input/event1 1 172 1                       
root@msm8909:/ # sendevent /dev/input/event1 0  0  0
root@msm8909:/ # sendevent /dev/input/event1 1 172 0
root@msm8909:/ # sendevent /dev/input/event1 0  0  0                          

你可能感兴趣的:(Android中getevent和setevent的应用)