Android中getevent和sendevent的应用

进入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                          

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值