確保硬體和軟體元件 (例如螢幕、音訊和語音互動) 可視需要選擇性開啟或關閉,而 AAOS 提供電源政策, 軟硬體元件預期的開機和關閉狀態。VHAL,或 具有系統特殊權限的供應商服務,可在 Android 電源狀態時套用新的電源政策 或在滿足期待時出現
系統允許在等待 VHAL 和 開啟 (有時可能會受到限制)。「關閉準備」頁面正在運作,車庫模式正在運作,應該 不要受到電源狀態變更乾擾。雖然無法套用一般電源政策, 特殊電源政策,也就是未與使用者互動的系統電源政策, 關機準備。
AAOS 電源狀態
AAOS 裝置會依循以下電源狀態圖進行:
圖 1. AAOS 電源狀態圖表。
每個電源狀態的說明如下:
值 | 說明 |
---|---|
關閉 |
|
等待 VHAL |
|
開啟 |
|
關機準備 |
|
等待 VHAL 完成 |
|
暫停連線至 RAM (STR) |
|
暫停連接磁碟 (STD) |
|
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