خط‌مشی برق

برای اطمینان از اینکه اجزای سخت‌افزاری و نرم‌افزاری (مثل نمایشگر، صدا، و تعامل صوتی) به‌صورت انتخابی و درصورت نیاز روشن و خاموش می‌شوند، AAOS خط‌مشی توان ارائه می‌دهد که شامل مجموعه‌ای از وضعیت‌های روشن و خاموش موردانتظار برای اجزای سخت‌افزاری و نرم‌افزاری است. ‫VHAL یا خدمات فروشنده دارای امتیاز سیستم می‌توانند وقتی وضعیت توان Android تغییر می‌کند یا وقتی شرایطی که منتظر آن هستند برآورده می‌شود، خط‌مشی توان جدیدی اعمال کنند.

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

وضعیت روشن بودن AAOS

دستگاه‌های AAOS از این نمودار وضعیت توان پیروی می‌کنند:

نمودار وضعیت روشن بودن AAOS

شکل ۱. نمودار وضعیت توان AAOS.

هر وضعیت توان در زیر توضیح داده شده است:

مقدار شرح
خاموش
  • به پردازنده کاربرد (AP)، حافظه، و پیرامونی‌ها برق فیزیکی ارائه نمی‌شود.
درانتظار VHAL
  • وقتی راننده با خودرو تعامل برقرار می‌کند (برای مثال، با باز کردن در)، VMCU برق AP، حافظه، و لوازم جانبی را تأمین می‌کند.
  • ‫AAOS از یکی از سه حالت (خاموش، تعلیق به RAM (STR، منتظر اتمام VHAL)) به حالت «منتظر VHAL» می‌رود، جایی که منتظر هماهنگی با VHAL می‌ماند.
روشن
  • ‫VHAL به AAOS دستور می‌دهد که وارد حالت «روشن» شود. در این حالت، AAOS به‌طور کامل درحال اجرا است و با راننده تعامل دارد.
  • نمایشگر توسط خط‌مشی توان کنترل می‌شود و نه توسط تماس‌های «روشن/خاموش کردن نمایشگر Android» برای سایر ضرایب شکل.
آماده‌سازی خاموش کردن
  • وقتی راننده رانندگی را متوقف می‌کند، VHAL به AAOS دستور می‌دهد وارد حالت «آماده‌سازی خاموش کردن» شود که با مرحله «آماده‌سازی پیش‌از خاموش کردن» شروع می‌شود و پس‌از آن مرحله اصلی «آماده‌سازی خاموش کردن» انجام می‌شود. در مرحله اصلی، نمایشگر و صدا خاموش است و AAOS با راننده تعامل ندارد. سیستم Android همچنان درحال اجرا است و می‌تواند برنامه‌ها و سیستم Android را به‌روز کند. وقتی هریک از به‌روزرسانی‌ها تکمیل شود، سیستم Android وارد «انتظار برای اتمام VHAL» می‌شود.
منتظر بمانید تا VHAL تمام شود
  • ‫AAOS به VHAL اطلاع می‌دهد که می‌تواند خاموش شود. انتظار می‌رود «واحد میکروکنترلر خودرو» (VMCU) «سیستم روی تراشه» (SoC) را در حالت «خواب عمیق» قرار دهد و برق AP را قطع کند. سپس AAOS در وضعیت STR قرار می‌گیرد، اگرچه هیچ کدی اجرا نمی‌شود.
  • اگر VHAL تمام نشود و راننده برگردد، واحد سر (HU) باید مستقیماً به «انتظار برای VHAL» منتقل شود.
تعلیق به حافظه دسترسی تصادفی (STR)
  • خودرو و AP خاموش هستند، هیچ کدی اجرا نمی‌شود، و برق در AP RAM حفظ می‌شود.
تعلیق به دیسک (STD)
  • خودرو و AP خاموش هستند، هیچ کدی اجرا نمی‌شود، و هیچ برقی به واحد پردازش و AP RAM نمی‌رسد.

خط‌مشی توان چگونه تعریف می‌شود؟

پیاده‌سازان خط‌مشی‌های برق را در /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_REQ VHAL شناسه گروه خط‌مشی قدرت را در این دارایی می‌نویسد.

خط‌مشی توان فعلی در سیستم می‌تواند توسط واحدهایی غیراز 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