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