Android CarPower

一、CarPower介绍

在Android Automotive OS (AAOS)中,CarPower负责车载电源的原理,它一面同libsusped交互控制AP(应用处理器,也就是Soc)的电源状态,一方面通过VehicleHAL与MCU通信接收和发送电源相关指令。其中CarPowerManagementService作为CarService的子服务,负责调用HAL层(VehicleHAL)实现具体功能,而CarPowerManagement作为客户端接口由APP调用,如下为CarPower的Block图:

CarPower重要的状态如下:

CpmsState:

状态含义

WAIT_FOR_VHAL

0

表示 Android 的电源状态已启动,但等待VHAL发出启动主要功能的信号。

ON

1

表示系统的电源状态处于ON状态。

SHUTDOWN_PREPARE

2

示系统正在准备关机或挂起的电源状态。应用程序应清理并准备挂起。

WAIT_FOR_FINISH

3

AAOS 通知 VHAL 它可以关闭。车载微控制器单元 (VMCU) 应将系统芯片 (SoC) 置于深度休眠模式,并断开 AP 的电源。然后,AAOS 进入 STR 状态,但不执行任何代码。

SUSPEND

4

车辆和 AP 断电,不执行任何代码,AP/RAM 仍然通电。

SIMULATE_SLEEP

5

-

SIMULATE_HIBERNATION

7

-

对应的状态迁移图如下:



CarPowerManager State:

状态含义

STATE_INVALID

0

表示当前电源状态的电源状态不可用、未知或无效。

STATE_WAIT_FOR_VHAL

1

表示 Android 的电源状态已启动,但等待VHAL发出启动主要功能的信号。

STATE_SUSPEND_ENTER

2

表示系统进入深度睡眠(挂起到 RAM)的电源状态。

STATE_SUSPEND_EXIT

3

表示系统从挂起中唤醒的电源状态。

STATE_SHUTDOWN_ENTER

5

表示系统进入关机状态的电源状态。

STATE_ON

6

表示系统的电源状态处于ON状态。

STATE_SHUTDOWN_PREPARE

7

表示系统正在准备关机或挂起的电源状态。应用程序应清理并准备挂起。

STATE_SHUTDOWN_CANCELLED

8

表示关机的电源状态被取消,恢复正常状态。

STATE_HIBERNATION_ENTER

9

表示系统进入休眠(挂起到磁盘)状态的电源状态。

STATE_HIBERNATION_EXIT

10

表示系统从休眠状态唤醒的电源状态。

STATE_PRE_SHUTDOWN_PREPARE

11

表示系统关机的电源状态已启动,但输出组件(如显示器)仍处于打开状态。在此状态下,可以显示显示设备即将关闭的 UI。

STATE_POST_SUSPEND_ENTER

12

电源状态表示汽车电源管理服务和VHAL完成处理以进入深度睡眠并且设备即将进入睡眠状态。

STATE_POST_SHUTDOWN_ENTER

13

电源状态表示汽车电源管理服务和VHAL完成处理以关闭并且设备即将关闭电源。

STATE_POST_HIBERNATION_ENTER

14

电源状态表示汽车电源管理服务和VHAL完成处理以进入休眠状态并且设备即将休眠。

ShutdownType:

ShutdownType

含义

SHUTDOWN_TYPE_UNDEFINED

0

未知

SHUTDOWN_TYPE_POWER_OFF

1

Power Off

SHUTDOWN_TYPE_DEEP_SLEEP

2

Deep Sleep

SHUTDOWN_TYPE_HIBERNATION

3

-

二、CarPower相关类

如下为CarPower类图:

1、CarPower相关

CarPowerManager

CarPowerManager用于管理车辆的电源状态,它提供了一组API来监听和控制车辆的电源状态变化。与其他的CarService中的服务不同, 除了提供了java类的接口CarPowerManager以外, CarPowerManagementService还有对应的C++类的接口, 类名同样也叫CarPowerManager。

增加 C++类的接口主要是为了向一些使用 C++编写的服务提供CarPowerManager相关的功能. 帮助其管理电源的状态. 在接口的定义和功能上面, 无论是java 还是 C++的 CarPowerManager都是一样的, 他们都对应于同一个CarPowerManagerService。

CarPowerManager代码位于:

packages/services/Car/car-lib/src/android/car/hardware/power/CarPropertyManager.java

packages/services/Car/car-lib/native/CarPowerManager/CarPropertyManager.cpp

packages/services/Car/car-lib/native/include/CarPropertyManager.h

CarPowerManager的定义:

public class CarPowerManager extends CarManagerBase {}
class CarPowerManager : public android::RefBase {}

CarPowerManagementService

CarPowerManagementService为CarPowerManager的服务端,负责处理CarPowerManager的请求和调用CarPowerManager注册的回调,内部使用状态机管理电源状态,底层通过libsusped和VehicleHAL执行具体功能。

CarPowerManagementService代码位于:

packages/services/Car/service/src/com/android/car/power/CarPowerManagementService.java

CarPowerManagementService的定义:

public class CarPowerManagementService extends ICarPower.Stub implements
        CarServiceBase, PowerHalService.PowerEventListener {}

PowerHalService

PowerHalService用于管理车辆电源的硬件抽象层服务。它充当了车辆电压与底层HAL之间的接口,通过HAL进行交互,实现对车辆电源的控制,主要方法包括:

void setListener(PowerEventListener listener):Sets the event listener to receive Vehicle's power events.

void sendWaitForVhal():Send WaitForVhal message to VHAL

void sendSleepEntry(int wakeupTimeSec):Send SleepEntry message to VHAL

void sendSleepExit():Send SleepExit message to VHAL

void sendHibernationEntry(int wakeupTimeSec):Sends HibernationEntry message to VHAL

void sendHibernationExit() :Sends HibernationExit message to VHAL

void sendShutdownPostpone(int postponeTimeMs):Send Shutdown Postpone message to VHAL

void sendShutdownStart(int wakeupTimeSec):Send Shutdown Start message to VHAL

void sendOn() :Send On message to VHAL

void sendShutdownPrepare():Send Shutdown Prepare message to VHAL

void sendShutdownCancel() :Send Shutdown Cancel message to VHAL

void sendDisplayBrightness(int brightness) :Sets the display brightness for the vehicle.brightness value from 0 to 100.

PowerState getCurrentPowerState():representing the current power state for the vehicle.

PowerHalService代码位于:

packages/services/Car/service/src/com/android/car/hal/PowerHalService.java

PowerHalService的定义:

public class PowerHalService extends HalServiceBase {}

PowerComponentHandler

PowerComponentHandler是管理系统中电源组件的类。创建与电源组件对应的电源组件调解器并将其注册到此类。电源组件调解器封装了通电/关机功能。

PowerComponentHandler代码位于:

packages/services/Car/service/src/com/android/car/power/PowerComponentHandler.java

PowerComponentHandler的定义:

public final class PowerComponentHandler {}

ICarPower

ICarPower是一个AIDL接口,CarPowerManagementService实现这个接口,CarPowerManager通过调用ICarPower接口与CarPowerManagementService交互。

ICarPower代码位于:

packages/services/Car/car-lib/src/android/car/hardware/power/ICarPower.aidl

ICarPower的定义:

interface ICarPower {}

ICarPowerStateListener

ICarPowerStateListener是一个AIDL接口,CarPowerManagementService实现这个接口,CarPowerManager通过调用ICarPower接口与CarPowerManagementService交互。

ICarPowerStateListener代码位于:

packages/services/Car/car-lib/src/android/car/hardware/power/ICarPowerStateListener.aidl

ICarPowerStateListener的定义:

interface ICarPowerStateListener{}

2、CarPowerPolicy相关

CarPowerPolicy

CarPowerPolicy是汽车电源策略定义的类。

CarPowerPolicy代码位于:

packages/services/Car/car-lib/src/android/car/hardware/power/CarPowerPolicy.aidl

packages/services/Car/car-lib/src/android/car/hardware/power/CarPowerPolicy.java

packages/services/Car/car-lib/native/CarPowerManager/CarPowerPolicy.cpp

packages/services/Car/car-lib/native/include/CarPowerPolicy.h

CarPowerPolicy的定义:

public final class CarPowerPolicy implements Parcelable {}
class CarPowerPolicy : public android::Parcelable {}

CarPowerPolicyFilter

CarPowerPolicyFilter用于筛选以接收侦听器感兴趣的电源策略更改。

CarPowerPolicyFilter代码位于:

packages/services/Car/car-lib/src/android/car/hardware/power/CarPowerPolicyFilter.aidl

packages/services/Car/car-lib/src/android/car/hardware/power/CarPowerPolicyFilter.java

packages/services/Car/car-lib/native/CarPowerManager/CarPowerPolicyFilter.cpp

packages/services/Car/car-lib/native/include/CarPowerPolicyFilter.h

CarPowerPolicyFilter的定义:

public final class CarPowerPolicyFilter implements Parcelable {}
class CarPowerPolicyFilter : public android::Parcelable {}

CarPowerPolicyServer

CarPowerPolicyServer实现了ISilentModeChangeHandler和ICarPowerPolicyServer.aidl,它会在 Android 框架控制设备之前处理电源策略请求和静默模式。

CarPowerPolicyServer代码位于:

packages/services/Car/cpp/powerpolicy/server/src/CarPowerPolicyServer.cpp

packages/services/Car/cpp/powerpolicy/server/src/CarPowerPolicyServer.h

CarPowerPolicyServer的定义:

class CarPowerPolicyServer final :
      public ISilentModeChangeHandler,
      public ::aidl::android::frameworks::automotive::powerpolicy::BnCarPowerPolicyServer {}

ICarPowerPolicyListener

ICarPowerPolicyListener代码位于:

packages/services/Car/car-lib/src/android/car/hardware/power/ICarPowerPolicyListener.aidl

ICarPowerPolicyListener的定义:

interface ICarPowerPolicyListener {}

三、CarPowerManager API

1、JAVA Api

void requestShutdownOnNextSuspend() :请求电源管理器在下次有机会时关闭而不是挂起

@CarPowerState int getPowerState():获取Power状态

void setListener(@NonNull @CallbackExecutor Executor executor, @NonNull CarPowerStateListener listener):设置监听器

void setListenerWithCompletion(@NonNull @CallbackExecutor Executor executor, @NonNull CarPowerStateListenerWithCompletion listener):设置监听器

void clearListener() :清除监听器

CarPowerPolicy getCurrentPowerPolicy() :获取当前电源策略

void applyPowerPolicy(@NonNull String policyId) :应用电源策略

void setPowerPolicyGroup(@NonNull String policyGroupId) :设置电源策略组

void addPowerPolicyListener(@NonNull @CallbackExecutor Executor executor, @NonNull CarPowerPolicyFilter filter, @NonNull CarPowerPolicyListener listener):设置电源策略监听

void removePowerPolicyListener(@NonNull CarPowerPolicyListener listener) :删除电源策略监听

2、C++ Api

int setListener(Listener listener):设置监听器

int clearListener():清除监听器

int requestShutdownOnNextSuspend():请求电源管理器在下次有机会时关闭而不是挂起

四、CarPower流程分析

CarPowerManagementService启动流程分析

Android13 CarPowerManagementService启动流程分析-CSDN博客

CarPowerManager setListener流程分析

Android13 CarPowerManager setListener流程分析-CSDN博客

CarPowerManagementService onApPowerStateChange流程分析

Android13 CarPowerManagementService onApPowerStateChange流程分析-CSDN博客

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<iostream> #include<string> using namespace std; class Car{ private: string ID;//车辆编号 string Model;//车辆型号 int Power;//车辆功率 string Color;//车辆颜色 double Price;//车辆价格 public: void setID(string carID){ ID = carID; } string getID(){ return ID; } void setModel(string carModel){ Model = carModel; } string getModel(){ return Model; } void setPower(int carPower){ Power = carPower; } int getPower(){ return Power; } void setColor(string carColor){ Color = carColor; } string getColor(){ return Color; } void setPrice(double carPrice){ Price = carPrice; } double getPrice(){ return Price; } void Display(){//显示车辆属性信息 cout<<"编号"<<ID<<"的"<<Model<<"汽车的颜色是"<<Color<<"色,功率为"<<Power<<"马力,价格为"<<Price<<"元"<<endl; } }; int main(){ Car car1, car2; string ID, Model, Color; int Power; double Price; //获取车辆1的信息 cout<<"请输入车辆1的编号:"; getline(cin, ID); car1.setID(ID); cout<<"请输入车辆1的型号:"; getline(cin, Model); car1.setModel(Model); cout<<"请输入车辆1的颜色:"; getline(cin, Color); car1.setColor(Color); cout<<"请输入车辆1的功率:"; cin>>Power; car1.setPower(Power); cout<<"请输入车辆1的价格:"; cin>>Price; car1.setPrice(Price); cin.ignore();//清除缓存区 cout<<endl; //获取车辆2的信息 cout<<"请输入车辆2的编号:"; getline(cin, ID); car2.setID(ID); cout<<"请输入车辆2的型号:"; getline(cin, Model); car2.setModel(Model); cout<<"请输入车辆2的颜色:"; getline(cin, Color); car2.setColor(Color); cout<<"请输入车辆2的功率:"; cin>>Power; car2.setPower(Power); cout<<"请输入车辆2的价格:"; cin>>Price; car2.setPrice(Price); //显示车辆信息 car1.Display(); car2.Display(); return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值