fWX228941 / project

all by myself
1 stars 0 forks source link

关机闹钟 #25

Open fWX228941 opened 5 years ago

fWX228941 commented 5 years ago

关机闹钟 1.可能性评估 1.1.AP是智能系统OS和上面的应用所组成的,包括闹钟都是由AP控制的,AP本身可以看为一个PC,那么一旦关机,肯定是无法运行应用,从而也就无法进行闹钟的触发,Android 的原生设计,注册的闹钟在设备睡眠的时候仍然会保留,可以选择性地设置是否唤醒设备,但是当设备关机和重启后,闹钟将会被清除。 1.2.像华为这样的手机厂商很早就支持了,这个功能属于硬件功能,需要硬件产商配合来作,没法作为操作系统的基本功能。 1.3.When the phone is off, it's actually off. Not a powered-down mode. if the phone is off, it can't do anything. If it's in sleep mode where the screen is off and it's not in use then the alarm will still function as will other types of notifications. 【android原生是不支持的】 Some Android phones offer a feature that automatically turns your phone back on at a certain time if you shut it down before going to bed. The manufacturers that offer this feature vary greatly. 【厂商自行定制】 1.4.高通平台和MTK平台 【驱动配合修改】 1.5.早年的手机之所以要经常关机,是因为有的人不想夜间被骚扰,镍氢电池开机充电有损伤,同时通信模块耗电高,关机能够省电。但是对于iPhone和Android手机来说,情况已经完全不一样了。有飞行模式可以避免骚扰,锂电池可以随时充电,屏幕才是耗电大户,要省电锁屏就是了,关机显得并不是那样重要了,所以苹果和谷歌的设计者可能更倾向于故意舍掉这个功能以阻止用户关机。这样用户就可以随时随地的玩手机,手机的价值也会提升到一个新的高度。

2.可行性方案 2.1.BP负责硬件启动,通讯模块等部分,在BP层挂接特殊模块能够和AP相关驱动配合一起设置闹钟触发点,也就是说,当开机时设置的闹钟同时被设置到AP层,这样当关机情况下,当接近闹钟触发点时启动AP来进行相应的闹钟处理。 2.2.做假关机,实际上是进入待机休眠模式,这样当然闹钟应用可以正常工作。不好的是因为没有实际关机,会增加耗电。 【pass】但关机不是完全断电,一些基本但耗电量可以忽略不计的模块还是要工作的,比如计时,开机等。 2.3. 完全在BP层处理闹钟行为,AP层设置好后,BP层检测到AP层关机状态时直接处理闹钟事件和相应反应。不过这样的坏处是要在BP层实现非常类似AP层闹钟的界面,否则会导致界面不统一。 【pass】但闹钟触发并不启动一个完整的系统,而是启动一个仅仅显示闹钟界面的简单界面,一般不必追求所谓界面统一性。在此界面下如果点选开机才会真正启动操作系统。 2.4.支持关机闹钟的手机并没有完全断电,一定有一部分电量在保持着部分功能运行。关机闹钟最常见的启动方案是BP带动AP,这一专利是属于诺基亚的。通常手机关机时,AP就不发挥作用了,而BP模块就会自动给AP模块上电,让系统开机并激活闹钟功能,闹钟随之响起。所以,关机闹钟实际上是硬件功能,并非通过安装程序就能实现的。 2.5.另一种关机闹钟启动方案是中兴的,是通过RF(射频通道,主要功能是接收发射射频信号)来实现。手机关机后,先开启射频通道,获得当前的网络时间并与闹钟设定时间进行比对,当网络时间达到闹钟设定时刻后,启动闹铃提示,实现了关机模式下的闹铃提示功能。这使得在某些含有时间的网络中,可让原本不支持关机闹钟的手机实现闹钟功能,对于原本有关机闹钟功能的手机则可以获得更加精准的时间,进行更加精准的闹钟提示。由于每一款手机内都有RF模块,因此手机不需要增加新的硬件就能实现。可见,两种方案基本都是基于硬件支持的,同系统关系并不是很大。

3.期望效果 3.1.期望:关机的情况下,还能通知AP层的闹钟进程来触发闹钟。【怎么通知AP层,通信】 3.2.流程:设置的时间到—>Alarm Boot—>关机闹钟响起,出现关机闹钟界面

4.MTK 平台下 闹钟流程 4.1. AlarmManager系统级别的提醒服务,全局定时器 可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,实现闹钟功能。闹钟的类型AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;【hide 属性 而且是】 4.2.在闹钟广播接收器(简称alarmreceiver)的onReceive()方法被执行的时候,AlarmManager持有一个CPU唤醒锁,这样就保证了设备在处理完广播之前不会sleep。一旦onReceive()方法返回,AlarmManager就会释放这个锁。 4.3.推荐思路 4.3.1.首先需要硬件支持,支持alarm中断触发开机,目前高通平台几乎都支持。 4.3.2.关机前需要在rtc-xxx.c中做到enable_irq_wake,和不disable alarm功能(默认开机后alarm功能就会打开,通常关机时qct会关闭该功能避免alarm触发乱开机) 4.3.3.在AlarmManagerService.java当set请求来自闹钟时改变type类型,alarm_dev.c接收到后记下timespec(注意:闹钟app只会将距离当前时间最近的闹钟set下来),重新还原type类型,当闹钟app全部关闭时需要设0下来; 4.3.4.在rtc-xxx.c中shutdowm接口,写入3中time到alarm寄存器(所设的时间必须大于当前时间才可以写入,小于时需要disable alarm功能避免alarm导致莫名其妙的开机);

4.4.Alarm就是一个硬件时钟,它提供了一个定时器,用于把设备从睡眠状态唤醒,同时它也提供了一个在设备睡眠时仍然会运行的时钟基准。在应用层上,有关时间的应用都需要Alarm的支持,源代码位于“kernel/drivers/rtc/alarm.c”。

终端 是提前一分钟开机实现的,而且是让它开机的

https://blog.csdn.net/u012728256/article/details/70045693 https://www.pc841.com/shoujizhishi/41346.html

https://blog.csdn.net/kris_fei/article/details/77862629 https://blog.csdn.net/kris_fei/article/details/77862711 http://www.gimoo.net/t/1604/571d74fad5390.html

可行性方案 http://airk000.github.io/android/2013/10/09/poweroff-alarm.html https://blog.csdn.net/weiqifa0/article/details/49495079 https://blog.csdn.net/g_salamander/article/details/8487328