为了使用功能强大的多点触控设備一种方案是上报用户层所需的详细的手指触摸数据。这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数據信息
任何一个手指的触控数据都是打包成 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事件用来向上层报告硬件所采集的手指的触摸轨迹
下面是两指触摸的最小事件集 :
“触摸”这个词用来描述工具(手指,笔等)直接接触触摸屏表面。
接触面的短轴如果是圆形接触面,这个参数可以省略
接触工具的切面的短轴,如果是圆形此参数鈳以省略。
果完全平行于X轴则上向返回最大值。如果接触面是圆形则可以忽略这个参数。如果内核不能获得这个参数有有效值但鈳以区分接触面的长短轴,这个功能还是可以被部份支持在一些设备中, ABS_MT_ORIENTATION 的值只能是 0和1
接触面的形心的X坐标值。
接触面的形心的Y坐标值
用来标识多边形的边的集合,大多数内核不支持这个参数
仅有少数设备支持,用来区别一个触摸动作的周期
一些设备将触摸面作为一个矩形上报,可以通过下面这些公式来计算出协议中所需要的信息
ABS_MT_ORIENTATION的取值范围为0至1,用来标识矩形接触面偏向X轴或Y軸的程度
仅有少数设备可以明触的标识真实的 trackingID,多数情况下 trackingID只能来标识一次触摸动作的过程
多点触摸指定的应用是创建手势动作, TOUCH和 WIDTH參数经常用来区别手指的压力和手指间的距离另外 MINOR类的参数可以用来区别设备的接触面的大小(点接触还是面接触) ,ORIENTATION可以产生旋转事件
为了完作支持己有的应用,多点触控驱动应上报单点触控相应的 event另外,所有的触控事件需要通过 input子系统向上传递
目前内核只有 bcm5974这麼一个驱动支持多点触控,可以以此为例设计你的驱动
2)这个协议需要补充。
3)多点触控的驱动尚没不成熟到目前为此( 2009年4月) ,多点触控协议还没有 merged到内核主开发分支
|
|
|
|
求助特种部队请将帖子发到“问题反馈栏目“反馈或提供后续信息请在我的回贴下面,直接点击“回复” |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。