برای اطمینان از اینکه اجزای سختافزاری و نرمافزاری (مانند نمایشگر، صدا و تعامل صوتی) به صورت انتخابی روشن و خاموش میشوند، AAOS یک سیاست مصرف برق ارائه میدهد که شامل مجموعهای از حالتهای مورد انتظار روشن و خاموش شدن برای اجزای سختافزاری و نرمافزاری است. VHAL یا سرویسهای فروشنده دارای امتیاز سیستم، میتوانند یک سیاست مصرف برق جدید را هنگام انتقال حالت مصرف برق اندروید یا زمانی که شرایطی که منتظر آن هستند، برآورده شود، اعمال کنند.
اعمال یک سیاست مصرف برق در حالتهای Wait for VHAL و On (گاهی اوقات با برخی محدودیتها) مجاز است. در Shutdown Prepare، حالت گاراژ در حال اجرا است و نباید با تغییر وضعیت مصرف برق مختل شود. اگرچه نمیتوان یک سیاست مصرف برق معمولی اعمال کرد، یک سیاست مصرف برق ویژه، که همان سیاست مصرف برق سیستم به نام no user interaction است، در Shutdown Prepare اعمال میشود.
وضعیت توان AAOS
دستگاههای AAOS از این نمودار وضعیت توان پیروی میکنند:

شکل 1. نمودار وضعیت قدرت AAOS.
هر حالت قدرت در زیر شرح داده شده است:
| ارزش | توضیحات |
|---|---|
| خاموش |
|
| منتظر VHAL باشید |
|
| روشن |
|
| آماده سازی برای خاموش کردن سیستم |
|
| صبر کنید تا VHAL تمام شود |
|
| تعلیق به RAM (STR) |
|
| تعلیق به دیسک (STD) |
|
سیاست قدرت چگونه تعریف میشود؟
مجریان، سیاستهای قدرت را در /vendor/etc/automotive/power_policy.xml تعریف میکنند که:
- سیاست قدرت را تعریف میکند.
- گروههای سیاست مصرف برق را تعریف میکند، که شامل سیاست مصرف برق پیشفرض هستند و هنگام وقوع تغییر وضعیت مصرف برق، به طور خودکار اعمال میشوند.
- سیاست مصرف انرژی سیستم را لغو میکند.
سیاست قدرت
سیاست مصرف برق شامل مجموعهای از وضعیتهای مصرف برق مورد انتظار برای اجزای سختافزاری و نرمافزاری است. AAOS از این اجزا در سیاست مصرف برق پشتیبانی میکند:
| صوتی رسانه نمایش بلوتوث | وای فای سلولی اترنت پروجکشن | ان اف سی ورودی تعامل صوتی تعامل بصری | تشخیص_دستگاه_مورد_اعتماد مکان میکروفون پردازنده |
فروشندگان همچنین میتوانند اجزای قدرت سفارشی خود را برای استفاده با سیاستهای قدرت تعریف کنند. اجزای قدرت سفارشی را در همان فایل XML به عنوان سیاستهای قدرت تعریف کنید، مانند این مثال:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
گروه سیاستگذاری قدرت
گروه سیاست مصرف برق، سیاست مصرف برق پیشفرض را برای اعمال خودکار در انتقال وضعیت مصرف برق مشخص میکند. فروشندگان میتوانند سیاست مصرف برق پیشفرض را برای «منتظر VHAL»، «روشن» و «منتظر پایان VHAL (ورود به حالت خواب عمیق یا شروع خاموش شدن)» تعریف کنند.
سیاستهای مصرف برق سیستم
AAOS از دو سیاست مصرف انرژی سیستم پشتیبانی میکند که عبارتند از عدم تعامل با کاربر و تعلیق آمادهسازی. سیاست مصرف انرژی سیستم زمانی اعمال میشود که دستگاه به حالت بیصدا، حالت گاراژ، تعلیق در RAM یا تعلیق در دیسک برود.
جداول زیر رفتار هر جزء در سیاست مصرف انرژی سیستم را فهرست میکنند. مجریان میتوانند بلوتوث، NFC و تشخیص دستگاه مورد اعتماد را در سیاست مصرف انرژی سیستم بدون تعامل کاربر لغو کنند. لغوها در /vendor/etc/power_policy.xml اعمال میشوند.
بدون تعامل کاربر
رفتار سیاست عدم تعامل کاربر با سیستم در این جدول تعریف شده است:
| قطعات | حالت قدرت | قابل تنظیم |
|---|---|---|
| صوتی | خاموش | خیر |
| رسانه | خاموش | خیر |
| نمایش | خاموش | خیر |
| بلوتوث | خاموش | بله |
| وای فای | روشن | خیر |
| سلولی | روشن | خیر |
| اترنت | روشن | خیر |
| طرح ریزی | خاموش | خیر |
| ان اف سی | خاموش | بله |
| ورودی | خاموش | خیر |
| دستیار | خاموش | خیر |
| تعامل کاربر | خاموش | خیر |
| تشخیص دستگاه مورد اعتماد برای ورود کاربر | روشن | بله |
| مکان | خاموش | خیر |
| میکروفون | خاموش | خیر |
| پردازنده | روشن | خیر |
آماده سازی را به حالت تعلیق درآورید
رفتار سیاست قدرت سیستم suspend prep در این جدول تعریف شده است:
| قطعات | حالت قدرت | قابل تنظیم توسط OEM |
|---|---|---|
| صوتی | خاموش | خیر |
| رسانه | ناموجود | خیر |
| نمایش | ناموجود | خیر |
| بلوتوث | خاموش | خیر |
| وای فای | خاموش | خیر |
| سلولی | ناموجود | خیر |
| اترنت | ناموجود | خیر |
| طرح ریزی | ناموجود | خیر |
| ان اف سی | ناموجود | خیر |
| ورودی | ناموجود | خیر |
| دستیار | ناموجود | خیر |
| تعامل کاربر | ناموجود | خیر |
| تشخیص دستگاه مورد اعتماد برای ورود کاربر | ناموجود | خیر |
| مکان | خاموش | خیر |
| میکروفون | خاموش | خیر |
| پردازنده | خاموش | خیر |
تعامل با VHAL
دیمن سیاست مصرف برق خودرو که در لایه سیستم اجرا میشود، دو ویژگی را برای گوش دادن به درخواستهای VHAL به اشتراک میگذارد:
-
POWER_POLICY_REQVHAL شناسه سیاست قدرت را در این ویژگی مینویسد. -
POWER_POLICY_GROUP_REQVHAL شناسه گروه سیاست قدرت را در این ویژگی مینویسد.
سیاست مصرف برق فعلی در سیستم میتواند توسط ماژولهایی غیر از VHAL تغییر کند. در این صورت، سرویس مدیریت مصرف برق خودرو، ویژگی CURRENT_POWER_POLICY را بهروزرسانی میکند تا تغییر را به VHAL اطلاع دهد.
تعامل با فرآیندهای بومی
سرویس مدیریت توان خودرو (CPMS) مدیریت سیاست توان را به دیمن سیاست توان خودرو (car power policy daemon) واگذار میکند. این دیمن تنها منبع حقیقت برای سیاستهای توان در سیستم است. دیمن سیاست توان خودرو وضعیت سیاست توان را مدیریت میکند و تغییرات را به CPMS، VHAL و سایر کلاینتهای بومی اطلاع میدهد.
دیمن سیاست مصرف برق خودرو، رابطهای 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);
}
تعامل با ماژولهای جاوا
CarPowerManager روشهایی را برای فعال کردن مدیریت سیاست مصرف انرژی ارائه میدهد:
- سیاست مصرف برق فعلی را دریافت کنید
- اعمال یک سیاست قدرت جدید
- یک گروه سیاست قدرت جدید تنظیم کنید
فقط ماژولهای دارای امتیاز سیستم میتوانند از این روشها استفاده کنند. ماژولهایی که میخواهند از اعمال یک سیاست مصرف برق مطلع شوند، میتوانند یک شنونده تغییر سیاست مصرف برق را در CarPowerManager ثبت کنند.