嵌入式linux 电容触摸屏驱动框架

           电容触摸屏驱动其实就是以下几种 linux 驱动框架的组合:    

         1,IIC 设备驱动,因为电容触摸 IC 基本都是 IIC 接口的,因此大框架就是 IIC 设备驱动。

        2,通过中断引脚(INT)linux 内核上报触摸信息,因此需要用到 linux 中断驱动框架。坐标的上报在中断服务函数中完成。

        3,触摸屏的坐标信息、屏幕按下和抬起信息都属于 linux input 子系统,因此向 linux 内核上报触摸屏坐标信息就得使用 input 子系统。只是,我们得按照 linux 内核规定的规则来上报坐标信息。

        我们应该已经了解了IIC驱动,中断驱动还有input子系统,唯一不太清楚的可能就是在input子系统里面如何上报多点电容触摸的信息。这是跟多点触摸协议相关的。

        老版本的linux内核是不支持多点电容触摸的(Multi-Touch),简称MT,是后面的版本新加上去的。MT协议被分为两种类型,TypeA和TypeB,两种类型区别如下:

        TypeA:适用于触摸点不能被区分或者追踪,此类型的设备上报原始数据(实际应用中很少)

        TypeB:适用于有硬件追踪并能区分触摸触摸点的触摸设备,此类型设备通过slot更新某一个触摸点信息,FT5426就属于此类型,一般的多点电容触摸IC都有此能力。

        触摸点信息通过一系列的ABS_MT事件上报给linux内核,只有ABS_MT事件用于多点触摸的,ADS_MT事件如下:

         在上面众多AMS_MT事件中,我们最常用的是AMS_MT_SLOT,AMS_MT_POSITION_X,AMS_MT_POSITION_Y和AMS_MT_TRACKING_ID。其中ABS_MT_POSITION_X 和 ABS_MT_POSITION_Y 用 来 上报 触 摸点 的 (X,Y) 坐 标 信息 , ABS_MT_SLOT 用 来 上 报 触 摸 点 ID ,对于 Type B 类 型 的 设 备 ,需 要 用 到ABS_MT_TRACKING_ID 事件来区分触摸点。

        对于TypeA类型的设备,通过input_mt_sync函数来隔离不同的触摸点数据信息,此函数原型如下所示:

        此函数只有一个参数,类型为input_dev,用于指定具体的input_dev设备,input_mt_sync函数会触发SYN_MT_REPORT事件,此事件会通知接受者获取当前触摸数据,并准备接收下一个触摸点信息。

        对于TypeB类型的设备,上报触摸点信息的时候需要通过input_mt_slot函数区分是哪一个触摸点,函数原型如下:

         第二个参数slot用于指定当前上报的是哪一个触摸点的信息,input_mt_sl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值