Linux驱动学习(TP)(三)

Linux驱动学习(TP)(三)

多点电容触摸协议分为两种:Type A和Type B

Type A协议

该协议用于触摸点不能被区分或者追踪,一般不使用了。
在每个数据包的结尾用input_mt_sync()对多个触控包进行分割,这将会产生一个SYN_MT_REPORT事件,它通知接收者接受当前的触控信息并准备接收下一个信息。
目前使用最多的还是Type B协议。

Type B协议

适用于硬件追踪并且能够区分触摸点的触摸设备;
通过slot更新某一个触摸点的信息;
项目中使用的均为该协议

在上报触摸点信息的时候使用的函数是:input_mt_slot(struct input_dev *dev, int slot)

该函数中包含两个参数:
第一个参数表示的是input_dev()设备,即输入设备
第二个参数slot表示的是当前上报的触摸点信息位置(是哪个位置触摸点)

上报时序

1、上报ABS_MT_SLOT事件

即上报触摸点对应的slot。每次上报一个触摸点坐标之前需要先使用input_mt_slot()函数上报当前触摸点的SLOT。

2、SLOT对应的关联函数操作

根据Type B协议的要求,每个SLOT必须关联一个ABS_MT_TRACKING_ID,通过修改SLOT关联的ABS_MT_TRACKING_ID完成对触摸点的添加,删除或者替换等。通过input_mt_report_slot_state()函数实现上述操作。

input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, true)

参数一:输入设备

参数二:触摸方式
MT_TOOL_FINGER:手指触摸
MT_TOOL_PEN:笔触

参数三:active,表示是否添加新的触摸点,true表示添加第三个触摸点,linux 内核会自动分配一个 ABS_MT_TRACKING_ID 值,不需要用户去指定具体的 ABS_MT_TRACKING_ID 值。

3、上报触摸点的信息

使用input_report_abs()函数:
e.g.

input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, events[i].          area);
input_report_abs(input_dev, ABS_MT_POSITION_X, events[i].x);   
input_report_abs(input_dev, ABS_MT_POSITION_Y, events[i].y);

参数一:表示输入设备
参数二:表示事件类型,
ABS_MT_TOUCH_MAJOR表示上报触摸点面积信息,
ABS_MT_POSITION_X和ABS_MT_POSITION_Y分别表示X坐标和Y坐标信息
参数二的其他标志信息可以看https://www.cnblogs.com/linhaostudy/p/11046425.html

其他常见使用的上报信息函数

上报键值信息
Input_report_key() 
上报坐标信息(绝对坐标)
Input_report_abs()
上报坐标信息(相对坐标)
Input_report_rel()
4、发送SYN_REPORT事件

当所有的触摸点信息都上传完毕之后,发送SYN_REPORT事件,使用的函数是input_sync()函数,

input_sync(input_dev);
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值