十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
二、touch事件分析
专注于为中小企业提供成都网站设计、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业盖州免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
1、机器touch设备的具体信息
分析:此设备名字:mtk-tpd
支持:key abs
支持abs的type:0000 0001 0018...
type0035支持的最大取值为480
2、touch 事件
触摸事件的type:
#define SYN_REPORT 0
#define SYN_CONFIG 1
#define SYN_MT_REPORT 2
……………………… ...
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
区分手机设备单点还是多点:
int EventHub::open_device(const char *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("It is a multi-touch screen!");
}
//single-touch?
else if (test_bit(BTN_TOUCH, key_bitmask)
&& test_bit(ABS_X, abs_bitmask)
&& test_bit(ABS_Y, abs_bitmask)) {
device->classes |= CLASS_TOUCHSCREEN;
// LOGI("It is a single-touch screen!");
}
……………… ..
}
对于一个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