电容触摸屏驱动其实就是一下几种 linux 驱动框架的组合:
① IIC 设备驱动,因为电容触摸 IC 基本都是 IIC 接口的,因此大框架就是 IIC 设备驱动。
② 通过中断引脚(INT)向 linux 内核上报触摸信息,因此需要用到 linux 中断驱动框架。坐标的上报在中断
服务函数中完成。
③ 触摸屏的坐标信息、屏幕按下和抬起信息都属于 linux 的 input 子系统,因此向 linux 内核上报触摸屏
坐标信息就得使用 input 子系统。只是,我们得按照 linux 内核规定的规则来上报坐标信息。
input 子系统下的多点电容触摸协议
触摸点的信息通过一系列的 ABS_MT 事件(有的资料也叫消息)上报给 linux 内核,只有 ABS_MT 事件是用于多点触摸的。
MT 协议被分为两种类型,TypeA 和 TypeB,这两种类型的区别如下:
TypeA:适用于触摸点不能被区分或者追踪,此类型的设备上报原始数据(此类型在实际使用中非常少!)。
Type B:适用于有硬件追踪并能区分触摸点的触摸设备,此类型设备通过 slot 更新某一个触摸点的信
#define ABS_MT_POSITION_X 0x35
#define ABS_MT_POSITION_Y 0x36
息,FT5426 就属于此类型,一般的多点电容触摸屏 IC 都有此能力。
ABS_MT_POSITION_X 和 ABS_MT_POSITION_Y 用来上报触摸点的 (X,Y) 坐标信息
对于 Type B 类型的设备,上报触摸点信息的时候需要通过 input_mt_slot()函数区分是哪一个触摸点,
input_mt_slot()函数原型如下所示: