为了使用功能强大的多点触控设备,一种方案是上报用户层所需的详细的手指触摸
数据。这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指
的数据信息。
使用说明
任何一个手指的触控数据都是打包成 ABS event 包按顺序发送,只有 ABS_MT
event 包能作为多点触控数据被识别,调用 input_mt_sync()函数可以产生一个
SYN_MT_REPORT event ,这个函数接收并处理当前手指的信息并准备接收其它手指
的触控信息。最后调用 input_sync()函数上报 EV_SYN/SYN_REPORT
event 完成一个包的开始处理并准备处理下一个包。
协议定义了 ABS_MT 事件的属性,这些事件被分为几大类,充许只应用其中的
一部份,多点触摸最小的事件集中应包括 ABS_MT_POSITION_X 和
ABS_MT_POSITION_X,这两个事件用来描述多点触摸中手指的触摸轨迹。如果设备支
持这两个事件,那么 ABS_MT_TOUCH_MAJOR 和 ABS_MT_WIDTH_MAJOR 分别被用来提
供手指的大小和触摸面积大小。
TOUCH 和 WIDTH 参数给出了个,想想如果一个手指按在玻璃上,透过玻璃你将
看到两个区域,一个是手指与玻璃接触的区域,用 ABS_MT_TOUCH_MAJOR 描述,一
个是手指本身大小的区域, ABS_MT_WIDTH_MAJOR 描述, 手指与玻璃接触的面积要
小于手指本身的大小,通过这两个参数,可以换算出手指的压力。也可通过
ABS_MT_PRESSURE 参数直接提供手指的压力。
除了 MAJOR 这个参数,还可以提供一个 MINOR 参数,手指可以被认为是一个椭
圆, MAJOR 和 MINOR 可以认为是这个椭圆的长轴和短轴,椭圆的中心可以被
ORIENTATION 这个参数描述。
ABS_MT_TOOL_TYPE 参数用来描述触摸工具的类型(手指,触控笔等)。不同的
设备可能有一些其它的信息需要传递到用户层。比如 ABS_MT_BLOB_ID 用来描述长
方形的边的集合,目前仅有少数设备可以被支持, ABS_MT_TRACKING_ID 事件用来
向上层报告硬件所采集的手指的触摸轨迹。
下面是两指触摸的最小事件集 :
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
SYN_MT_REPORT //上报第一指坐标数据
ABS_MT_POSITION_X
ABS_MT_POSITION_Y