Android 中多点触摸协议:事件
参考: http://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txtget
1, 两种多点触摸协议:input
1)A类: 处理无关联的接触: 用于直接发送原始数据;io
B类: 处理跟踪识别类的接触: 经过事件slot发送相关联的独立接触更新。event
2, 触摸协议的使用:硬件
A类协议:数据
A类协议在每发送完一个接触数据包后会调用 input_mt_sync() 声明 一次数据的结束; input_mt_sync() 会发出一个 SYN_MT_REPORT协议
提示接收器接收数据并准备下一次数据的接收。touch
B类协议:co
与A类协议不一样的是, B类在使用input_mt_slot()的时候会带有一个slot的参数,在每一个数据包开始时 产生一个ABS_MT_SLOT事件,提示接收器更新数据。
最终A,B类协议均会调用 input_sync();
A类与B类协议不一样的在于: B类协议 经过B类协议 slot 协议须要是用到ABS_MT_TRACKING_ID------ 能够从硬件上获取,或者从原始数据中计算。
3, B类协议: ABS_MT_TRACKING_ID 表示一次接触; -1 表明一个不用的slot;
使用参考例子:
释放事件:
input_mt_slot(data->input_dev, i);
input_mt_report_slot_state(data->input_dev, MT_TOOL_FINGER, false); ---------------释放
点击事件:
input_mt_slot(data->input_dev, i); input_mt_report_slot_state(data->input_dev, MT_TOOL_FINGER, true); input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, 1); input_report_abs(data->input_dev, ABS_MT_POSITION_X, current_events[i].x); input_report_abs(data->input_dev, ABS_MT_POSITION_Y, current_events[i].y)