برای اطمینان از اینکه اجزای سختافزاری و نرمافزاری (مثل نمایشگر، صدا، و تعامل صوتی) بهصورت انتخابی و درصورت نیاز روشن و خاموش میشوند، AAOS خطمشی توان ارائه میدهد که شامل مجموعهای از وضعیتهای روشن و خاموش موردانتظار برای اجزای سختافزاری و نرمافزاری است. VHAL یا خدمات فروشنده دارای امتیاز سیستم میتوانند وقتی وضعیت توان Android تغییر میکند یا وقتی شرایطی که منتظر آن هستند برآورده میشود، خطمشی توان جدیدی اعمال کنند.
اعمال خطمشی برق در وضعیتهای «انتظار برای VHAL»، «روشن»، و «آمادهسازی پیشاز خاموش شدن» (گاهی با برخی محدودیتها) مجاز است. برخلاف «انتظار برای VHAL» و «روشن»، خطمشی برق پیشفرض را نمیتوان برای «آمادهسازی قبلاز خاموش شدن» در گروه خطمشی برق پیکربندی کرد. در مرحله اصلی «آمادهسازی خاموش کردن»، «حالت گاراژ» درحال اجرا است و نباید با تغییر وضعیت روشن/خاموش مختل شود. اگرچه خطمشی برق معمولی نمیتواند اعمال شود، خطمشی برق ویژهای که خطمشی برق سیستم با نام بدون تعامل کاربر است در مرحله «آمادهسازی خاموش کردن» اصلی اعمال میشود.
وضعیت روشن بودن AAOS
دستگاههای AAOS از این نمودار وضعیت توان پیروی میکنند:

شکل ۱. نمودار وضعیت توان AAOS.
هر وضعیت توان در زیر توضیح داده شده است:
| مقدار | شرح |
|---|---|
| خاموش |
|
| درانتظار VHAL |
|
| روشن |
|
| آمادهسازی خاموش کردن |
|
| منتظر بمانید تا VHAL تمام شود |
|
| تعلیق به حافظه دسترسی تصادفی (STR) |
|
| تعلیق به دیسک (STD) |
|
خطمشی توان چگونه تعریف میشود؟
پیادهسازان خطمشیهای برق را در /vendor/etc/automotive/power_policy.xml تعریف میکنند که:
- خطمشی توان را تعریف میکند.
- گروههای خطمشی توان را تعریف میکند که شامل خطمشی توان پیشفرض است و هنگام انتقال وضعیت توان بهطور خودکار اعمال میشود.
- خطمشی برق سیستم را ملغی میکند.
خطمشی برق
خطمشی توان شامل مجموعهای از وضعیتهای توان موردانتظار برای مؤلفههای سختافزار و نرمافزار است. AAOS از این عناصر در خطمشی توان پشتیبانی میکند:
|
صدا رسانه نمایشگر بلوتوث |
Wi-Fi سیمکارتدار اترنت افکنه |
NFC ورودی تعامل_صوتی تعامل_دیداری |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
فروشندگان همچنین میتوانند عناصر قدرت سفارشی خودشان را برای استفاده با خطمشیهای قدرت تعریف کنند. اجزای قدرت سفارشی را در همان فایل XML خطمشیهای قدرت تعریف کنید، مانند این مثال:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
گروه خطمشی برق
گروه خطمشی توان، خطمشی توان پیشفرض را مشخص میکند تا بهطور خودکار در انتقالهای وضعیت توان اعمال شود. فروشندگان میتوانند خطمشی توان پیشفرض را برای «انتظار برای VHAL» و «روشن» تعریف کنند.
خطمشیهای برق سیستم
AAOS از دو خطمشی انرژی سیستم پشتیبانی میکند که عبارتاند از بدون تعامل کاربر و آمادهسازی تعلیق. خطمشی توان سیستم زمانی اعمال میشود که دستگاه وارد «حالت بیصدا»، «حالت گاراژ»، «تعلیق به RAM»، یا «تعلیق به دیسک» شود.
جدولهای زیر رفتار هر عنصر را در خطمشی توان سیستم فهرست میکند.
پیادهسازان میتوانند تشخیص «بلوتوث»، «ارتباطات میدان نزدیک»، و «دستگاه مطمئن» را در خطمشی توان سیستم بدون تعامل کاربر ملغی کنند. جایگزینها در
/vendor/etc/automotive/power_policy.xml اعمال میشود.
بدون تعامل کاربر
عملکرد خطمشی توان سیستم بدون تعامل کاربر در این جدول تعریف شده است:
| اجزا | وضعیت روشن بودن | قابلپیکربندی |
|---|---|---|
| صوتی | خاموش | نه |
| رسانه | خاموش | نه |
| نمایش | خاموش | نه |
| بلوتوث | خاموش | بله |
| Wi-Fi | روشن | نه |
| شبکه همراه | روشن | نه |
| اترنت | روشن | نه |
| پیشبینی | خاموش | نه |
| NFC | خاموش | بله |
| ورودی | خاموش | نه |
| دستیار | خاموش | نه |
| تعامل کاربر | خاموش | نه |
| تشخیص دستگاه مطمئن برای ورود به سیستم کاربر | روشن | بله |
| مکان | خاموش | نه |
| میکروفون | خاموش | نه |
| CPU | روشن | نه |
تعلیق آمادهسازی
عملکرد خطمشی برق سیستم آمادهسازی تعلیق در این جدول تعریف شده است:
| اجزا | وضعیت روشن بودن | قابلپیکربندی توسط سازنده اصلی محصول |
|---|---|---|
| صوتی | خاموش | نه |
| رسانه | موجود نیست | نه |
| نمایش | موجود نیست | نه |
| بلوتوث | خاموش | نه |
| Wi-Fi | خاموش | نه |
| شبکه همراه | موجود نیست | نه |
| اترنت | موجود نیست | نه |
| پیشبینی | موجود نیست | نه |
| NFC | موجود نیست | نه |
| ورودی | موجود نیست | نه |
| دستیار | موجود نیست | نه |
| تعامل کاربر | موجود نیست | نه |
| تشخیص دستگاه مطمئن برای ورود به سیستم کاربر | موجود نیست | نه |
| مکان | خاموش | نه |
| میکروفون | خاموش | نه |
| CPU | خاموش | نه |
تعامل با VHAL
کارگزار خطمشی برق خودرو که در لایه سیستم اجرا میشود، دو دارایی را برای شنیدن درخواستهای VHAL مشترک میکند:
POWER_POLICY_REQ«لایه انتزاعی سختافزار خودرو» شناسه خطمشی قدرت را در این دارایی مینویسد.POWER_POLICY_GROUP_REQVHAL شناسه گروه خطمشی قدرت را در این دارایی مینویسد.
خطمشی توان فعلی در سیستم میتواند توسط واحدهایی غیراز VHAL تغییر کند. در این حالت،
کارگزار خطمشی برق خودرو ویژگی CURRENT_POWER_POLICY را بهروزرسانی میکند تا
تغییر را به VHAL اطلاع دهد.
تعامل با پردازشهای بومی
CarPowerManagementService (CPMS) مدیریت خطمشی توان را به کارگزار خطمشی توان خودرو واگذار میکند. کارگزار منبع واحد حقیقت برای خطمشیهای برق در سیستم است. کارگزار خطمشی برق خودرو وضعیت خطمشی برق را مدیریت میکند و 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);
}
تعامل با واحدهای Java
CarPowerManager روشهایی برای فعال کردن مدیریت خطمشی توان ارائه میدهد:
- دریافت خطمشی توان فعلی
- اعمال خطمشی جدید توان
- تنظیم گروه خطمشی برق جدید
فقط واحدهای دارای امتیاز سیستم میتوانند از این روشها استفاده کنند. واحدهایی که میخواهند
وقتی خطمشی توان اعمال میشود مطلع شوند میتوانند شنونده تغییر خطمشی توان را ثبت کنند تا
CarPowerManager