Android 系统 TP 事件处理流程

简单流程

首先注册 i2c 设备,添加 tp 驱动,然后在 tp 驱动上响应中断、获取用户操作的
数据,通过筛选等一系列操作将数据上报。
总体流程图
*中断、线程、工作队列生成
*放大缩小、xy 对调等算法
*get_event 函数使用

1. 系统调用 TP 驱动

初始化流程图
TP 驱动的调用流程大体类似,通过 module_init 和 module_exit 函数调用与卸载
驱动,同时注册了两个函数,分别是 tpd_device_init 和 tpd_device_exit 用以驱
动初始化。
在这里插入图片描述
在 tpd_device_init 函数中向 i2c_broad 注册 i2c 设备,同时通过 tpd_driver_add 将
tpd_device_drive 添 加 到 tpd_driver_list 中 。 在 tpd_device_exit 函 数 中 通 过
tpd_driver_remove 注销我们注册的函数。
系统通过 tpd_driver_add 添加驱动后会回调 tpd_local_init 函数,对本地变量环境
等进行初始化,最后调用 tpd_i2c_probe 函数对具体设备进行检测与设置,同时
注册触摸线程。

2. TP 响应操作

响应流程图
TP 响应用户的操作原理其实很简单,就是当用户点击屏幕进行操作的时候,会
产生中断。通过和 BaseBand 连接的中断引脚触发 BaseBand 去 TP 的寄存器去
读点。然后将点进行处理,再通过 tpd_down 和 tpd_up 上报。

在 tpd_i2c_probe 这个入口函数中会通过 touch_event_handler 函数来运行触摸
线程等待队列,同时调用 tpd_irq_registration 这个函数去注册 tp 驱动的中断。
当中断触发的时候就会唤醒等待队列。
在这里插入图片描述
中断函数注册后通过 wait_event_interruptible 对等待队列进行唤醒调用 touch 线
程。
在这里插入图片描述
touch_event_handler 函数通过 report_data_handle 检查读点,判断按键状态调用
tpd_down 和 tpd_up

3. 报点处理

数据处理流程图
接收到的数据通过 report_data_handle 发送到 tpd_down 和 tpd_up 函数,tpd_down
函数调用过 input_report_abs 和 input_report_key 来进行处理,然后通过
input_mt_sync 函数来进行同步。Tpd_down 函数中参数 x、y 即为当前在 tp 中
的逻辑设备坐标。在 input_report_abs 这个函数会通过 input_event 函数继续上
报:
在这里插入图片描述
在 input_handle_event 函数中调用 input_event,input_event 函数中,首先会判
断当前过来的事件是不是系统所支持的。如果不支持的话 则未进行处理表示丢
弃,如果是系统支持的事件,就会通过一个互斥锁来进行事件处理。防止其它事
件和中断的干扰。通过 input_handle_event 继续对事件处理
在这里插入图片描述
在input_handle_event 中 通 过 input_get_disposition 判 断 类 型 支 持 , 再 通 过
input_pass_event 函数将对应的事件放到 eventHub 中进行处理。
将事件放到 eventHub 中,系统会通过 InputReader 和 InputDispatch 去完成事
件的分发。
在这里插入图片描述
tpd_up 函数通过 input_report_key 来进行处理,然后通过 input_mt_sync 函数来 进行同步
在这里插入图片描述

4. 亮屏息屏

设备通过 i2c 总线调用 tpd_device_driver 驱动执行 suspend 和 resume 函数对 tp
进行休眠与唤醒。一般 suspend 的时候 ic 要进入休眠模式且关闭中断刷新工作队
列等工作。在 resume 的时候要唤醒 ic,使能中断以及其他工作。在 ps 模拟距感
的情况下,检测通话熄屏则不需要经过休眠与唤醒,ic 仍处于工作状态。
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值