android event事件录制回放 --2 touch事件分析
二、touch事件分析
1、机器touch设备的具体信息
分析:此设备名字:mtk-tpd
支持:key abs
支持abs的type:0000 0001 0018...
type0035支持的最大取值为480
2、touch 事件
触摸事件的type:
#defineSYN_REPORT0
#defineSYN_CONFIG1
#defineSYN_MT_REPORT2
………………………...
#defineABS_MT_TOUCH_MAJOR0x30/*Majoraxisoftouchingellipse*/
#defineABS_MT_TOUCH_MINOR0x31/*Minoraxis(omitifcircular)*/
#defineABS_MT_WIDTH_MAJOR0x32/*Majoraxisofapproachingellipse*/
#defineABS_MT_WIDTH_MINOR0x33/*Minoraxis(omitifcircular)*/
#defineABS_MT_ORIENTATION0x34/*Ellipseorientation*/
#defineABS_MT_POSITION_X0x35/*CenterXellipseposition*/
#defineABS_MT_POSITION_Y0x36/*CenterYellipseposition*/
#defineABS_MT_TOOL_TYPE0x37/*Typeoftouchingdevice*/
#defineABS_MT_BLOB_ID0x38/*Groupasetofpacketsasablob*/
区分手机设备单点还是多点:
intEventHub::open_device(constchar*deviceName)
{
………………………
if(test_bit(ABS_MT_TOUCH_MAJOR,abs_bitmask)
&&test_bit(ABS_MT_POSITION_X,abs_bitmask)
&&test_bit(ABS_MT_POSITION_Y,abs_bitmask)){
device->classes|=CLASS_TOUCHSCREEN|CLASS_TOUCHSCREEN_MT;
//LOGI("Itisamulti-touchscreen!");
}
//single-touch?
elseif(test_bit(BTN_TOUCH,key_bitmask)
&&test_bit(ABS_X,abs_bitmask)
&&test_bit(ABS_Y,abs_bitmask)){
device->classes|=CLASS_TOUCHSCREEN;
//LOGI("Itisasingle-touchscreen!");
}
………………..
}
对于一个Touch事件,不同机型会有不同的组成,你用getevent显示出来的也不一样。可以通过下面几点去组成一个touch事件:
1、是否支持BTN_TOUCH,通过判断该abs设备是否还支持key事件来判断是否需要BTN_TOUCH,像
这个就是支持key事件的,而且持之BTN_TOUCH(014a :十进制为330)。对于这种设备,
在发送touchdown事件的时候需要添加 eventX 0001 014a 1的事件,对应在touchUp的时候需要添加eventX 0001 014a 0。
当不支持BTN_TOUCH的时候,就要省去该事件语句
2、判断多点触摸的协议类型,根据判断是否支持ABS_MT_SLOT。
多点触摸协议可以参考http://blog.csdn.net/droidphone/article/details/8434768
文章中详细说明了多点触摸协议的两种类型,还有两种类型分别的事件语句组成
A:有状态类型
ABS_MT_TRACKING_ID touchDown必须要有值,touchUp的时候值为-1
同步语句只要SYN_REPORT
B:无状态类型
ABS_MT_TRACKING_ID touchDown必须要有值,touchUp的时候值为0
同步语句要包括:SYN_REPORT 、SYN_MT_REPORT
3、对于touchDown,还必须包括:ABS_MT_POSITION_X
ABS_MT_POSITION_Y
SYN_REPORT
ABS_MT_TOUCH_MAJOR
ABS_MT_PRESSURE
4、对于touchMove,还必须包括:ABS_MT_POSITION_X
ABS_MT_POSITION_Y
SYN_REPORT
(无状态)ABS_MT_TRACKING_ID、SYN_MT_REPORT
ABS_MT_TOUCH_MAJOR
5、对于touchUP,还必须包括:
有状态:ABS_MT_TRACKING_ID -1BTN_TOUCH 0SYN_REPORT无状态:ABS_MT_TRACKING_ID 0ABS_MT_TOUCH_MAJOR 0BTN_TOUCH 0SYN_MT_REPORTSYN_REPORT
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。