Linux触摸屏

解析触摸屏上报的数据:

单点触摸事件上报流程:

# 点击触摸屏时

BTN_TOUCH //事件发生

ABS_X      //绝对X

ABS_Y      //绝对Y

SYN_REPORT //同步事件

# 滑动

ABS_X

ABS_Y

SYN_REPORT

# 松开

BTN_TOUCH

SYN_REPORT

当手指点击触摸屏时,首先上报 BTN_TOUCH 事件,此时 value=1,表示按下;接着上报 ABS_X、 ABS_Y事件将 X、 Y 轴坐标数据发送给应用层;数据上报完成接着上报一个同步事件 SYN_REPORT,表示此次触摸点信息已经完整。

当手指在触摸屏上滑动时,并不会上报 BTN_TOUCH 事件,因为滑动过程并未发生按下、松开这种动作。

当松开时,首先上报了 BTN_TOUCH 事件,此时 value=0,表示手指已经松开了触摸屏,接着上报一个同步事件 SYN_REPORT。

多点触摸设备上报数据的流程:

ABS_MT_SLOT 0

ABS_MT_TRACKING_ID 10

ABS_MT_POSITION_X

ABS_MT_POSITION_Y

ABS_MT_SLOT 1

ABS_MT_TRACKING_ID 11

ABS_MT_POSITION_X

ABS_MT_POSITION_Y

SYN_REPORT

slot 是硬件上的一个概念、而 ID 则可认为是软件上的一个概念;对于一个多点触摸设备来说,它最大支持的触摸点数是确定的,譬如 5 个触摸设备,最多支持 5 个触摸点;每一个触摸点在硬件上它有一个区分的编号,譬如触摸点0、触摸点 1、触摸点 2 等,这个编号就是一个 slot(通常从 0 开始) ; 如何给识别到的触点分配一个 slot 呢(触点与 slot 关联)?通常是按照时间先后顺序来的,譬如第一根手指先触碰到触摸屏,那第一根手指就对应触摸点 0(slot=0),接着第二根手指触碰到触摸屏则对应触摸点 1(slot=1)以此类推! 这个通常是硬件所支持的。

而 ID 可认为是软件上的一个概念,它也用于区分不同的触摸点,但是它跟 slot 不同, 不是同一层级的概念;举个例子,譬如一根手指触碰到触摸屏之后拿开,然后再次触碰触摸屏,这个过程中,假设只有这一根手指进行触碰操作,那么两次触碰对应都是触摸点 0(slot=0),这个无疑义!但从触摸点的生命周期来看, 它们是同一个触摸点吗?答案肯定不是,为啥呢?手指从触摸屏上离开后,该触摸点就消失了、被删除了, 该触摸点的生命周期也就到此结束了,所以它们自然是不同的触摸点, 所以它们的 ID 是不同的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值