原文地址: http://blog.csdn.net/makefish/archive/2010/06/03/5645475.aspx
在 Linxu 内核中,手指信息被内核抽象为一个个 ABS 数据包,由驱动顺序的发送给应用。
多点触摸的 ABS 数据包通常由 ABS_MT 标志。驱动调用 input_mt_sync 发送 SYN_MT_REPORT 来表示一个 ABS 数据包结束。应用收到 SYN_MT_REPORT 事件后,会处理当前数据包并准备接收下一个数据包。如果本次多点触摸所有手指的数据包都发送完毕,需要调用 input_sync 发送 SYN_REPORT ,以通知上层本次多点触摸结束了。 input_sync 之后就进入了下一次多点触摸周期。
通常的多点触摸周期可以描述为:
ABS_MT_*|SYN_MT_REPORT|ABS_MT_*|SYN_MT_REPORT|SYN_REPORT
有些 ABS_MT 事件是必须实现的,如 ABS_MT_POSITION_X 和 ABS_MT_POSITION_Y 。而某些事件,如 ABS_MT_TOUCH_MAJOR 和 ABS_MT_WIDTH_MAJOR 是否需要实现则取决于具体的硬件。
ABS_MT_TOUCH_MAJOR 表示了手指接触 TP 的直径的近似。 ABS_MT_WIDTH_MAJOR 是手指的直径的近似。当手指和触摸屏接触的越紧密,则压力越大,手指和屏幕接触的面积(直径)也会越大。而手指的直径通常是一个常量。这样 ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR 就可以用来表示压力了。而且这个值在 [0,1) 间。对于某些提供了压力值的 TP ,可以使用 ABS_MT_PRESSURE 来替代 ABS_MT_TOUCH_MAJOR 。