電源政策

確保硬體和軟體元件 (例如螢幕、音訊和語音互動) 可視需要選擇性開啟或關閉,而 AAOS 提供電源政策, 軟硬體元件預期的開機和關閉狀態。VHAL,或 具有系統特殊權限的供應商服務,可在 Android 電源狀態時套用新的電源政策 或在滿足期待時出現

系統允許在等待 VHAL 和 開啟 (有時可能會受到限制)。「關閉準備」頁面正在運作,車庫模式正在運作,應該 不要受到電源狀態變更乾擾。雖然無法套用一般電源政策, 特殊電源政策,也就是未與使用者互動的系統電源政策, 關機準備。

AAOS 電源狀態

AAOS 裝置會依循以下電源狀態圖進行:

AAOS 電源狀態圖表

圖 1. AAOS 電源狀態圖表。

每個電源狀態的說明如下:

說明
關閉
  • 應用程式處理器 (AP)、記憶體和 例如周邊裝置
等待 VHAL
  • 當駕駛人與車輛互動 (例如開門) 時,VMCU 才會執行 AP 和記憶體的運算能力和周邊裝置
  • AAOS 從三種狀態之一轉換 (關閉、暫停到 RAM (STR,等待 VHAL 結束)) 然後進入等待 VHAL,等待 VHAL 達成協調。
開啟
  • VHAL 指示 AAOS 進入「開啟」狀態。在這個狀態下,AAOS 已全面運作 和驅動程式互動
  • 螢幕由電源原則控制,而不是由 Android 螢幕開啟/關閉通話控制 板型規格
關機準備
  • 駕駛人停止駕駛時,VHAL 會指示 AAOS 進入關機準備狀態。 在這個狀態下,螢幕和音訊會關閉,且 AAOS 並未與 驅動程式庫。Android 系統仍在執行中,可以更新應用程式和 Android 系統。 更新完成後 (如有),Android 系統會進入等待 VHAL Finish。
等待 VHAL 完成
  • AAOS 會通知 VHAL,指出可以關閉。車輛微控器 (VMCU) 是 應將晶片系統 (SoC) 放入深睡,並移除 AP 的電源。 即使並未執行任何程式碼,AAOS 也會處於 STR 狀態。
  • 如果 VHAL 未完成且駕駛人退回,則車用運算主機 (HU) 應直接轉換 等待 VHAL。
暫停連線至 RAM (STR)
  • 車輛和 AP 都處於關閉狀態,不會執行程式碼並維持電力 AP RAM 也沒有限制
暫停連接磁碟 (STD)
  • 車輛關機且 AP 已關閉,未執行程式碼、裝置未節省電力 以及 AP RAM

Google 如何定義電力政策?

實作人員在 /vendor/etc/automotive/power_policy.xml 中定義電源政策。 也就是:

  • 定義電源原則。
  • 定義電源原則群組,其中包含預設電源原則,且會自動設為 才會在電源狀態轉換時套用。
  • 覆寫系統電源政策。

電源政策

電源政策是由一組硬體和軟體元件的預期電源狀態組成。 AAOS 支援電源政策中的下列元件:

音訊
媒體
螢幕
藍牙
Wi-Fi
行動
乙太網路
專案
近場通訊
輸入內容
VOICE_INTERACTION
視覺互動
TRUSTED_DEVICE_DETECTION
位置
麥克風
CPU

供應商也可以定義自己的自訂電源元件,以便與電源政策搭配使用。定義 自訂電源元件,方法是在與電源政策相同的 XML 檔案中,如以下範例所示:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

電源原則群組

系統會在電源狀態轉換時自動套用預設電源原則: 註冊 Pod 政策供應商可以定義 等待 VHAL、開啟並等待 VHAL 完成 (深度睡眠進入或關閉開始)。

系統電源政策

AAOS 支援兩項系統電源政策,這些政策不得與使用者互動暫停準備當裝置進入 靜音模式、車庫模式、暫停至 RAM 或將磁碟停權。

下表列出系統電源政策中各項元件的行為。 實作者可以覆寫藍牙、NFC 和信任的裝置偵測設定, 系統電源政策。覆寫設定會套用於 /vendor/etc/power_policy.xml

沒有使用者互動

「無使用者互動」系統電源政策的行為定義如下 資料表:

元件 電源狀態 可設定
音訊 關閉
媒體 關閉
螢幕 關閉
藍牙 關閉
Wi-Fi 開啟
行動網路 開啟
乙太網路 開啟
預測值 關閉
NFC 關閉
輸入 關閉
Google 助理 關閉
使用者互動 關閉
偵測使用者登入的信任裝置 開啟
位置 關閉
麥克風 關閉
CPU 開啟

暫停準備

暫停前置作業系統電源政策的行為定義如下:

元件 電源狀態 可設定原始設備製造商 (OEM)
音訊 關閉
媒體
螢幕
藍牙 關閉
Wi-Fi 關閉
行動網路
乙太網路
預測值
NFC
輸入
Google 助理
使用者互動
偵測使用者登入的信任裝置
位置 關閉
麥克風 關閉
CPU 關閉

與 VHAL 的互動

在系統層中執行的車輛電源政策 Daemon 會訂閱兩項屬性來監聽 來自 VHAL 的要求:

  • POWER_POLICY_REQ VHAL 會將電源政策 ID 寫入這個屬性。
  • POWER_POLICY_GROUP_REQ:VHAL 寫入電源原則群組 ID 加入這項資源。

VHAL 以外的模組可用來變更系統目前的電源政策。在此情況下 車輛電源政策 Daemon 更新 CURRENT_POWER_POLICY 屬性,以通知 轉化成 VHAL

與原生程序的互動

如上所述,車輛電源政策 Daemon 是在系統層中執行,並以電源為重 政策管理提供的功能,與架構層中的 CPMS 幾乎相同。 此外,請假設車輛電源政策 Daemon 和 CPMS 已全部同步。

車輛電源政策 Daemon 會匯出 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.
     * @throws IllegalStateException if the current policy is not set.
     */
    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.
     * @throws IllegalArgumentException if the componentId is invalid.
     */
    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.
     * @throws IllegalArgumentException if the callback is already registered.
     * @throws IllegalStateException if the callback is dead.
     */
    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.
     * @throws IllegalArgumentException if the callback is not registered.
     */
    void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback);

    /**
     * Applies the power policy.
     *
     * 

{@code policyId} should be one of power policy IDs defined in * {@code /vendor/etc/automotive/power_policy.xml} or predefined system power policies. * * @param policyId ID of power policy. * @throws IllegalArgumentException if {@code policyId} is invalid. */ void applyPowerPolicy(in @utf8InCpp String policyId); /** * Sets the current power policy group. * *

{@code policyGroupId} should be one of power policy group IDs defined in * {@code /vendor/etc/automotive/power_policy.xml}. * * @param policyGroupId ID of power policy group. * @throws IllegalArgumentException if {@code policyGroupId} is invalid. */ void setPowerPolicyGroup(in @utf8InCpp String policyGroupId); }

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