电源策略

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

为确保硬件和软件组件(如显示、音频和语音交互)根据需要有选择地打开和关闭,AAOS 提供了电源策略,该策略由硬件和软件组件的一组预期电源打开和关闭状态组成. VHAL 或系统特权供应商服务可以在 Android 电源状态转换或满足他们等待的条件时应用新的电源策略。

在 Wait for VHAL 和 On 状态下允许应用电源策略。在关机准备中,车库模式正在运行,不应受到电源状态变化的干扰。虽然无法应用常规电源策略,但在 Shutdown Prepare 中应用了一种特殊的电源策略,即名为“无用户交互”的系统电源策略。

AAOS 电源状态

AAOS 设备遵循此电源状态图:

AAOS 电源状态图

图 1. AAOS 电源状态图

每个电源状态描述如下:

价值描述
离开应用处理器 (AP)、内存和外围设备没有实际供电。
等待 VHAL
  • 当驾驶员与车辆交互时(例如,通过打开车门),VMCU 向 AP、存储器供电。和外围设备。
  • AAOS 从三种状态(Off、Suspend-to-RAM(STR、Wait for VHAL Finish))中的一种转变,然后进入 Wait for VHAL,等待与 VHAL 的协调。
  • VHAL 指示 AAOS 进入 On 状态。在此状态下,AAOS 完全运行并与驱动程序交互。
  • 显示由电源策略控制,而不是由其他外形规格的 Android 显示开/关调用控制。
关机准备
  • 当驾驶员停止驾驶时,VHAL 指示 AAOS 进入 Shutdown Prepare。在此状态下,显示和音频关闭,AAOS 不与驾驶员交互。安卓系统仍在运行,可以更新应用程序和安卓系统。当更新(如果有)完成后,Android 系统进入 Wait for VHAL Finish。
等待 VHAL 完成
  • AAOS 通知 VHAL 它可以关闭。预计车辆微控制器单元 (VMCU) 会将片上系统 (SoC) 置于深度睡眠状态并切断 AP 的电源。 AAOS 然后处于 STR 状态,尽管没有代码正在执行。
  • 如果 VHAL 未完成且驱动程序返回,则主机 (HU) 应直接转换为等待 VHAL。
挂起到 RAM (STR)车辆和 AP 已关闭,没有代码正在执行,AP RAM 保持供电。

软件架构

电源策略架构如下图所示,并在以下部分进行了定义:

图 2.电源策略架构

电源策略是如何定义的?

实施者在/vendor/etc/automotive/power_policy.xml中定义电源策略,其中:

  • 定义电源策略。
  • 定义电源策略组,其中包括默认电源策略并在发生电源状态转换时自动应用。
  • 覆盖系统电源策略。

电源策略

电源策略是硬件和软件组件的一组预期电源状态。 AAOS 在电源策略中支持以下组件:

  • AUDIO
  • MEDIA
  • DISPLAY_MAIN
  • DISPLAY_CLUSTER
  • DISPLAY_FRONT_PASSENGER
  • DISPLAY_REAR_PASSENGER
  • BLUETOOTH
  • WIFI
  • CELLULAR
  • ETHERNET
  • PROJECTION
  • NFC
  • INPUT
  • VOICE_INTERACTION
  • VISUAL_INTERACTION
  • TRUSTED_DEVICE_DETECTION
  • LOCATION
  • MICROPHONE
  • CPU

电源策略组

在电源策略组中指定的电源状态转换时自动应用默认电源策略。供应商可以为 Wait For VHAL、On 和 Wait for VHAL Finish (Deep Sleep Entry or Shutdown Start) 定义默认电源策略。

系统电源策略

AAOS 只支持一种系统电源策略,即“无用户交互”。当设备进入静音模式或车库模式时,将应用系统电源策略。

下表列出了系统电源策略中每个组件的行为。实施者可以覆盖系统电源策略中的蓝牙、NFC 和可信设备检测。覆盖应用在/vendor/etc/power_policy.xml中。

成分电源状态可配置
声音的离开
媒体离开
显示主离开
显示集群离开
显示前排乘客离开
显示后排乘客离开
蓝牙离开是的
无线上网
手机
以太网
投影离开
近场通信离开是的
输入离开
语音交互离开
视觉交互离开
可信设备检测是的
地点离开
麦克风离开
中央处理器

与 VHAL 的交互

运行在系统层的汽车电源策略守护进程订阅了两个属性来监听来自VHAL的请求:

  • POWER_POLICY_REQ ,VHAL 将电源策略 ID 写入此属性。
  • POWER_POLICY_GROUP_REQ ,VHAL 将电源策略组 ID 写入此属性。

系统中的当前电源策略可以由 VHAL 以外的模块更改。在这种情况下,汽车电源策略守护程序会更新CURRENT_POWER_POLICY属性以将更改通知给 VHAL。

与本机进程交互

如前所述,car power policy daemon运行在system层,在power policy management方面,与运行在framework层的CPMS提供了几乎相同的功能。此外,假设汽车电源策略守护程序和 CPMS 已完全同步。

汽车电源策略守护程序导出 AIDL 接口供 HAL 和其他本机进程使用。当更改新的电源策略时,可以通知他们。换句话说,当每个人都必须改变其电源状态时。

ICarPowerPolicyServer.aidl

package android.frameworks.automotive.powerpolicy;

import android.frameworks.automotive.powerpolicy.CarPowerPolicy;
import android.frameworks.automotive.powerpolicy.CarPowerPolicyFilter;
import android.frameworks.automotive.powerpolicy.ICarPowerPolicyChangeCallback;
import android.frameworks.automotive.powerpolicy.PowerComponent;

/**
 * ICarPowerPolicyServer is an interface implemented by the power policy daemon.
 * VHAL changes the power policy and the power policy daemon notifies the change to registered
 * subscribers. When subscribing to policy changes, a filter can be specified so that the registered
 * callbacks can listen only to a specific power component's change.
 */

@VintfStability
interface ICarPowerPolicyServer {
  /**
   * Gets the current power policy.
   */
  CarPowerPolicy getCurrentPowerPolicy();

  /**
   * Gets whether the power component is turned on or off.
   *
   * @param componentId Power component ID defined in PowerComponent.aidl to check power state.
   * @return True if the component's power state is on.
   */
  boolean getPowerComponentState(in PowerComponent componentId);

  /**
   * Subscribes to power policy change.
   * Notification is sent to the registered callback when the power policy changes and the power
   * state of the components which the callback is interested in changes.
   *
   * @param callback Callback that is invoked when the power policy changes.
   * @param filter The list of components which the callback is interested in.
   */
  void registerPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback,
      in CarPowerPolicyFilter filter);

  /**
   * Unsubscribes from power policy change.
   *
   * @param callback Callback that doesn't want to receive power policy change.
   */
  void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback);
}

ICarPowerPolicyChangeCallback.aidl

package android.frameworks.automotive.powerpolicy;

import android.frameworks.automotive.powerpolicy.CarPowerPolicy;

/**
 * ICarPowerPolicyChangeCallback is notified when a power policy changes.
 */

@VintfStability
oneway interface ICarPowerPolicyChangeCallback {
  /**
   * Called when a power policy is fully changed.
   *
   * @param policy The current policy.
   */
  void onPolicyChanged(in CarPowerPolicy policy);
}

与 Java 模块的交互

CarPowerManager提供了启用电源策略管理的方法:

  • 获取当前的电源策略。
  • 获取当前电源策略组
  • 应用新的电源策略
  • 设置新的电源策略组

只有系统特权模块可以使用这些方法。希望在应用电源策略时得到通知的模块可以向CarPowerManager注册电源策略更改侦听器。