Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178867
  • 博文数量: 27
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 618
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-15 09:12
文章分类
文章存档

2014年(17)

2013年(10)

我的朋友

分类: Android平台

2014-02-12 15:51:32

前两天突然看到诺基亚一款手机说,支持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有了一定的了解!

阅读(1967) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~