我们通过getevent命令得到的一系列打印,那么这些打印意义为何?这里我们将按照事件的类型来进行讲解。
1.EV_SYN:同步事件
同步事件出现在一个事件的开始和完成
对应的code:
(1) 0004:代表一个事件开始(不必要)
(2) 0005:代表一个事件开始(不必要)
(3) SYN_REPORT:代表一个事件结束(必要的)
有些手机上没有事件的开始,只有事件的结束,就算只有事件的结束,我们也可以区分去一个事件来。
2.EV_ABS:绝对坐标的事件类型
在触摸事件中EV_ABS事件是最常见的
对应的code
(1) ABS_MT_SLOT:本质代表着不同的手指,他的value代表手指id;
(2) ABS_MT_TRACKING_ID:B类协议特有的,每个slot会和一个ID相对应,一个非负数表示一次接触,ffffffff表示一次接触结束,即手指抬起。无论在接触的类型相对应的slot发生改变,驱动都应该通过改变这个值来使这个slot失效,并且下一次触摸的ID值会是这次的值加1;
(3) ABS_MT_POSITION_X,ABS_MT_POSITION_Y:相对于屏幕中心的x,y坐标;
(4) ABS_MT_TOUCH_MAJOR:接触部分的长轴长度,相当于椭圆的长轴;
(5) ABS_MT_TOUCH_MINOR:接触部分的短轴长度,相当于椭圆的短轴;
(6) ABS_MT_PRESSURE:代表按下压力,有的设备不一定有。
3.EV_KEY:按键事件
对应的code
(1) BTN_TOUCH:触碰按键,其值是DOWN或者UP;
(2) BTN_TOOL_FINGER:按键的是finger,其值是DOWN或者UP。
4.案例分析
两个手指分别按下,移动,然后分别抬起:
[ 1026.632366] /dev/input/event1: EV_SYN 0004 00000402 --同步头(其实理论上可以省略)
[ 1026.632366] /dev/input/event1: EV_SYN 0005 2576d0ba
[ 1026.632366] /dev/input/event1: EV_ABS ABS_MT_SLOT 00000000 代表第一个手指,其实第一个也可以没有,有的机器就第一次0是没有这个slot
[ 1026.632366] /dev/input/event1: EV_ABS ABS_MT_TRACKING_ID 00000016 第一个手指对应的TRACKING_ID
[ 1026.632366] /dev/input/event1: EV_KEY BTN_TOUCH DOWN 触摸按下
[ 1026.632366] /dev/input/event1: EV_KEY BTN_TOOL_FINGER DOWN
[ 1026.632366] /dev/input/event1: EV_ABS ABS_MT_POSITION_X 0000011a 按下X轴坐标
[ 1026.632366] /dev/input/event1: EV_ABS ABS_MT_POSITION_Y 00000475 按下Y轴坐标
[ 1026.632366] /dev/input/event1: EV_ABS ABS_MT_TOUCH_MAJOR 00000003 按下的椭圆长轴
[ 1026.632366] /dev/input/event1: EV_SYN SYN_REPORT 00000000 --同步尾(不省略)
[ 1027.937528] /dev/input/event1: EV_SYN 0004 00000403
[ 1027.937528] /dev/input/event1: EV_SYN 0005 37b18cde
[ 1027.937528] /dev/input/event1: EV_ABS ABS_MT_POSITION_X 0000011b 这里代表第一个手指移动后坐标
[ 1027.937528] /dev/input/event1: EV_ABS ABS_MT_POSITION_Y 00000476
[ 1027.937528] /dev/input/event1: EV_SYN SYN_REPORT 00000000
[ 1028.917333] /dev/input/event1: EV_SYN 0004 00000404
[ 1028.917333] /dev/input/event1: EV_SYN 0005 367d836c
[ 1028.917333] /dev/input/event1: EV_ABS ABS_MT_TOUCH_MINOR 00000003 这里是第一个手指的短轴,因为之前一直是slot为0
[ 1028.917333] /dev/input/event1: EV_ABS ABS_MT_SLOT 00000001 代表第二手指出来了
[ 1028.917333] /dev/input/event1: EV_ABS ABS_MT_TRACKING_ID 00000017 第二个手指对应TRACKING_ID
[ 1028.917333] /dev/input/event1: EV_ABS ABS_MT_POSITION_X 00000324 第二手指坐标
[ 1028.917333] /dev/input/event1: EV_ABS ABS_MT_POSITION_Y 00000165
[ 1028.917333] /dev/input/event1: EV_ABS ABS_MT_TOUCH_MAJOR 00000002
[ 1028.917333] /dev/input/event1: EV_ABS ABS_MT_TOUCH_MINOR 00000002 第二个手指短轴
[ 1028.917333] /dev/input/event1: EV_SYN SYN_REPORT 00000000
[ 1029.047446] /dev/input/event1: EV_SYN 0004 00000405
[ 1029.047446] /dev/input/event1: EV_SYN 0005 02afd368
[ 1029.047446] /dev/input/event1: EV_ABS ABS_MT_POSITION_Y 00000166 第二个手指坐标
[ 1029.047446] /dev/input/event1: EV_ABS ABS_MT_TOUCH_MAJOR 00000004
[ 1029.047446] /dev/input/event1: EV_ABS ABS_MT_TOUCH_MINOR 00000003
[ 1029.047446] /dev/input/event1: EV_SYN SYN_REPORT 00000000
[ 1029.903648] /dev/input/event1: EV_SYN 0004 00000405
[ 1029.903648] /dev/input/event1: EV_SYN 0005 35c02ec5
[ 1029.903648] /dev/input/event1: EV_ABS ABS_MT_SLOT 00000000
[ 1029.903648] /dev/input/event1: EV_ABS ABS_MT_POSITION_X 00000173 第一个手指X坐标
[ 1029.903648] /dev/input/event1: EV_ABS ABS_MT_SLOT 00000001
[ 1029.903648] /dev/input/event1: EV_ABS ABS_MT_POSITION_X 00000321 第二个手指X坐标
[ 1029.903648] /dev/input/event1: EV_SYN SYN_REPORT 00000000
[ 1031.902947] /dev/input/event1: EV_SYN 0004 00000407
[ 1031.902947] /dev/input/event1: EV_SYN 0005 35b8a020
[ 1031.902947] /dev/input/event1: EV_ABS ABS_MT_SLOT 00000000 第一个手指有事件
[ 1031.902947] /dev/input/event1: EV_ABS ABS_MT_TRACKING_ID ffffffff TRACKING_ID为-1代表第一个手指抬起消失
[ 1031.902947] /dev/input/event1: EV_SYN SYN_REPORT 00000000
[ 1032.024946] /dev/input/event1: EV_SYN 0004 00000408
[ 1032.024946] /dev/input/event1: EV_SYN 0005 016372d8
[ 1032.024946] /dev/input/event1: EV_ABS ABS_MT_SLOT 00000001 第二个手指有事件
[ 1032.024946] /dev/input/event1: EV_ABS ABS_MT_POSITION_Y 0000016c 第二个 Y坐标
[ 1032.024946] /dev/input/event1: EV_SYN SYN_REPORT 00000000
[ 1032.907686] /dev/input/event1: EV_SYN 0004 00000408
[ 1032.907686] /dev/input/event1: EV_SYN 0005 35ebac8c
[ 1032.907686] /dev/input/event1: EV_ABS ABS_MT_TRACKING_ID ffffffff 第二个手指消失抬起
[ 1032.907686] /dev/input/event1: EV_KEY BTN_TOUCH UP 抬起
[ 1032.907686] /dev/input/event1: EV_KEY BTN_TOOL_FINGER UP
[ 1032.907686] /dev/input/event1: EV_SYN SYN_REPORT 00000000