本文仅为工作中对AAOS电源管理的学习笔记,不作为教程或其他用途,存在对官方文档的大量摘抄和个人理解,如有错误烦请指出。
前注:本文由notion创作,由于Markdown对某些效果的实现略繁琐,因此如有需要请移步至原文,系列地址:Notion Share
车库模式是为AAOS提供空闲时间,以完成受空闲限制的任务调度器(JobScheduler
)中的任务(即满足public JobInfo.Builder setRequiresDeviceIdle (boolean requiresDeviceIdle)
中requiresDeviceIdle
值为真的任务)
一般,在手机中,Android提供一个闲时窗口状态,当用户一段时间没有对手机进行操作时(一般为60分钟或更长时间),手机将会被认为进入了空闲状态,在空闲状态下系统将会进行基础的维护、更新以及优化等任务。然而与手机不同,汽车不使用时,将会挂起或关闭,所以汽车将没有空闲状态。为了解决这个问题,AAOS引入了车库模式,确保系统存在空闲时间。
一般,当车辆关闭时,会先进入车库模式,在车库模式下,电源会被打开,显示屏不会亮起,并自动执行JobScheduler
中的任务。
车库模式的使用
如果想进入车库模式,则汽车关闭时,VHAL必须发送AP_POWER_STATE_REQ
信号,且状态参数(参数1)为SHUTDOWN_PREPARE
,同时,附加参数(参数2)需要为SHUTDOWN_ONLY
或CAN_SLEEP
。具体状态转换流程见《AAOS电源(1):概览与电源系统》的状态转换图。
连接到Android框架
构建运行方法
//通过继承JobService编写任务
public class MyGarageModeJob extends JobService { ... }
Context context = ...;
int jobId = ...;
//通过任务服务类创建ComponentName(组件名,用于启动服务或活动)
ComponentName myGarageModeJobName = new componentName(context,
MyGarageModeJob.class);
//创建任务状态描述
JobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName)
.setRequiresDeviceIdle(true);
// 设置任务状态描述,下行为一个演示demo,即任务需要网络状态为免费网络
infoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED);
//创建任务实例
JobScheduler jobScheduler = (JobScheduler) context
.getSystemService(Context.JOB_SCHEDULER_SERVICE);
//通过任务调度设置任务
jobScheduler.schedule(infoBuilder.build());
调试车库模式
-
启动车库模式的日志记录
adb shell stop adb shell setprop log.tag.GarageMode VERBOSE adb shell setprop log.tag.Finsky VERBOSE adb shell setprop log.tag.CAR.POWER VERBOSE adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE adb shell start
-
车库模式正在启动的日志
GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON
-
车库模式启动完成的日志
[GarageMode]: GarageMode was canceled
或
[GarageMode]: GarageMode completed normally
-
电源状态日志
CAR.POWER: starting shutdown prepare without Garage Mode GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode CAR.POWER: send shutdown prepare CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0
注:以上仅为输出日志,是否进入车库模式取决于车辆的电源状态迁移流程。
本篇内容为原创内容,采用CC BY-NC-SA 4.0协议许可
2022-07-26 22:57
UtopiaXC
于大连
Comments | NOTHING