简单流程

首先注册 i2c 设备,添加 tp 驱动,然后在 tp 驱动上响应中断、获取用户操作的

数据,通过筛选等一系列操作将数据上报。

android中如何开启事务 android事件处理流程_芯片


*中断、线程、工作队列生成

*放大缩小、xy 对调等算法

*get_event 函数使用

1. 系统调用 TP 驱动

android中如何开启事务 android事件处理流程_驱动开发_02


TP 驱动的调用流程大体类似,通过 module_init 和 module_exit 函数调用与卸载

驱动,同时注册了两个函数,分别是 tpd_device_init 和 tpd_device_exit 用以驱

动初始化。

android中如何开启事务 android事件处理流程_驱动开发_03


在 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 响应操作

android中如何开启事务 android事件处理流程_android中如何开启事务_04


TP 响应用户的操作原理其实很简单,就是当用户点击屏幕进行操作的时候,会

产生中断。通过和 BaseBand 连接的中断引脚触发 BaseBand 去 TP 的寄存器去

读点。然后将点进行处理,再通过 tpd_down 和 tpd_up 上报。在 tpd_i2c_probe 这个入口函数中会通过 touch_event_handler 函数来运行触摸

线程等待队列,同时调用 tpd_irq_registration 这个函数去注册 tp 驱动的中断。

当中断触发的时候就会唤醒等待队列。

android中如何开启事务 android事件处理流程_驱动开发_05


中断函数注册后通过 wait_event_interruptible 对等待队列进行唤醒调用 touch 线

程。

android中如何开启事务 android事件处理流程_等待队列_06


touch_event_handler 函数通过 report_data_handle 检查读点,判断按键状态调用

tpd_down 和 tpd_up

3. 报点处理

android中如何开启事务 android事件处理流程_芯片_07


接收到的数据通过 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 函数继续上

报:

android中如何开启事务 android事件处理流程_android_08


在 input_handle_event 函数中调用 input_event,input_event 函数中,首先会判

断当前过来的事件是不是系统所支持的。如果不支持的话 则未进行处理表示丢

弃,如果是系统支持的事件,就会通过一个互斥锁来进行事件处理。防止其它事

件和中断的干扰。通过 input_handle_event 继续对事件处理

android中如何开启事务 android事件处理流程_android中如何开启事务_09


在input_handle_event 中 通 过 input_get_disposition 判 断 类 型 支 持 , 再 通 过

input_pass_event 函数将对应的事件放到 eventHub 中进行处理。

将事件放到 eventHub 中,系统会通过 InputReader 和 InputDispatch 去完成事

件的分发。

android中如何开启事务 android事件处理流程_驱动开发_10


tpd_up 函数通过 input_report_key 来进行处理,然后通过 input_mt_sync 函数来 进行同步

android中如何开启事务 android事件处理流程_android中如何开启事务_11

4. 亮屏息屏

设备通过 i2c 总线调用 tpd_device_driver 驱动执行 suspend 和 resume 函数对 tp

进行休眠与唤醒。一般 suspend 的时候 ic 要进入休眠模式且关闭中断刷新工作队

列等工作。在 resume 的时候要唤醒 ic,使能中断以及其他工作。在 ps 模拟距感

的情况下,检测通话熄屏则不需要经过休眠与唤醒,ic 仍处于工作状态。

android中如何开启事务 android事件处理流程_等待队列_12


android中如何开启事务 android事件处理流程_android_13