電源政策

為了確保硬件和軟件組件(例如,顯示器,音頻和語音交互)選擇性地導通和關閉需要,AAOS提供電源策略,它由一組和關閉硬件和軟件組件的狀態預期功率的. VHAL 或系統特權供應商服務可以在 Android 電源狀態轉換或滿足它們等待的條件時應用新的電源策略。

在 Wait for VHAL 和 On 狀態下允許應用電源策略。在關機準備中,車庫模式正在運行,不應受到電源狀態變化的干擾。雖然不能應用於常規的電源策略,一個特殊的電源策略,這是一個名為“無用戶交互”系統電源策略,在關機準備應用。

AAOS 電源狀態

AAOS 設備遵循此電源狀態圖:

AAOS電源狀態圖

圖1. AAOS功率狀態圖

每個電源狀態描述如下:

價值描述
離開應用處理器 (AP)、內存和外圍設備沒有物理供電。
等待 VHAL
  • 當駕駛員與車輛交互時(例如,通過打開車門),VMCU 向 AP、內存供電。和外圍設備。
  • AAOS 從三種狀態(關閉、暫停到 RAM(STR、等待 VHAL 完成)之一轉換,然後進入等待 VHAL,等待與 VHAL 協調。
  • VHAL 指示 AAOS 進入 On 狀態。在這種狀態下,AAOS 完全運行並與驅動程序交互。
  • 顯示由電源策略控制,而不是由其他外形規格的 Android 顯示開/關調用控制。
關機準備
  • 當駕駛員停止駕駛時,VHAL 會指示 AAOS 進入關機準備。在這種狀態下,顯示和音頻關閉,AAOS 不與驅動程序交互。 Android系統仍在運行,可以更新應用程序和Android系統。當更新(如果有)完成時,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

電源策略組

默認電源策略在電源策略組中指定的電源狀態轉換時自動應用。供應商可以為等待 VHAL、開啟和等待 VHAL 完成(深度睡眠進入或關機啟動)定義默認電源策略。

系統電源策略

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。

與本機進程交互

如上所述,汽車電源策略守護進程運行在系統層,在電源策略管理方面,提供與運行在框架層的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