前两天突然看到诺基亚一款手机说,支持touch亮屏的功能,于是乎我就计划自己搞搞!
第一步:确定平台的touch芯片可以把系统从S3状态中唤醒
关于我现在接触的平台 touch芯片有一个引脚链接到一个AON的GPIO上。可以唤醒系统!平台不同需要看下硬件原理图
第二步:不要让touch驱动进入earlysuspend状态,说白了就是不要下电,
关于我现在的平台touch 和 LCD有些引脚走的是同一供电线路,所以部分供电不能断,保证touch可以工作。
第三步:在touch中断中加入一个wakelock,保证系统被touch中断唤醒后瞬间又睡眠了。
可以使用wakelock_timeout
第四步:在Native层的Power接口函数中调用PowerManagerService给Native的wakeup接口。
这是我实现功能的四部。
流程如下:设备进入S3状态 -> 点击touch,发生touch中断,唤醒系统 -> 在中断中申请wakelock,通过Input驱动上报数据 -> Input handler会把数据从kernel层推送到user层
-> InputReader线程会通过EventHub得到元数据 -> InputReader把得到数据通过消息队列QueuedInputListener::flush()发送给InputDispatcher -> dispatchOnceInnerLocked会区分事件类型,然后进入NativeInputManager中,调用InputDispatcherPolicyInterface提供的函数pokeUserActivity -> 进入到Native层中的PowerManager中android_server_PowerManagerService_userActivity在这里调用PowerManagerService的wakeUpFromNative函数即可
这也许并很好不是一个实现方式,但是通过这个流程,可以总结出来Native曾提供了线程交互的方法,对于input数据从kernel到user有了更深曾的认识,对于系统的suspend和resume有了一定的了解!
阅读(1977) | 评论(0) | 转发(1) |