خط‌مشی برق

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

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

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

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

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

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

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

مقدار شرح
خاموش
  • هیچ برقی به‌صورت فیزیکی به پردازنده برنامه‌ها (AP)، حافظه، و دستگاه‌های جانبی ارائه نمی‌شود.
منتظر شدن برای VHAL
  • وقتی راننده با خودرو تعامل برقرار می‌کند (برای مثال، با باز کردن در)، VMCU برق را به AP، حافظه، و لوازم جانبی اعمال می‌کند.
  • سیستم‌عامل Android Automotive از یکی‌از سه حالت (خاموش، تعلیق در RAM (STR، انتظار برای تکمیل VHAL)) انتقال می‌یابد و سپس وارد «انتظار برای VHAL» می‌شود، جایی که منتظر هماهنگی با VHAL می‌ماند.
روشن
  • VHAL به AAOS دستور می‌دهد که وارد وضعیت «روشن» شود. در این حالت، «سیستم‌عامل Android Automotive» کاملاً درحال اجرا است و با راننده تعامل دارد.
  • نمایشگر توسط خط‌مشی مصرف برق کنترل می‌شود و نه توسط تماس‌های روشن/خاموش نمایشگر Android برای سایر ضریب‌های شکل.
آماده‌سازی خاموش کردن
  • وقتی راننده رانندگی را متوقف می‌کند، VHAL به AAOS دستور می‌دهد تا وارد «آماده‌سازی خاموش شدن» شود که با مرحله «آماده‌سازی پیش‌از خاموش شدن» شروع می‌شود و سپس مرحله اصلی «آماده‌سازی خاموش شدن» دنبال می‌شود. در فاز اصلی، نمایشگر و صدا خاموش هستند و سیستم‌عامل Android Automotive با راننده تعامل ندارد. سیستم Android همچنان درحال اجرا است و می‌تواند برنامه‌ها و سیستم Android را به‌روز کند. وقتی به‌روزرسانی‌ها تکمیل شد، سیستم Android وارد «انتظار برای تکمیل VHAL» می‌شود.
منتظر بمانید تا VHAL تمام شود
  • سیستم‌عامل Android Automotive به VHAL اطلاع می‌دهد که می‌تواند خاموش شود. انتظار می‌رود «واحد ریزکنترل‌گر خودرو» (VMCU) «سیستم روی تراشه» (SoC) را در حالت «خواب عمیق» قرار دهد و برق AP را قطع کند. سپس AAOS در وضعیت STR قرار می‌گیرد، اگرچه هیچ کدی اجرا نمی‌شود.
  • اگر VHAL تمام نشود و راننده برگردد، واحد اصلی (HU) باید مستقیماً به «انتظار برای 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_REQ VHAL شناسه خط‌مشی مصرف برق را در این ویژگی می‌نویسد.
  • 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);
  }

تعامل با واحدهای جاوا

‫CarPowerManager روش‌هایی برای فعال کردن مدیریت خط‌مشی مصرف برق ارائه می‌دهد:

  • دریافت خط‌مشی فعلی مصرف برق
  • اعمال خط‌مشی جدید مصرف برق
  • تنظیم گروه خط‌مشی مصرف برق جدید

فقط واحدهای دارای امتیاز سیستم می‌توانند از این روش‌ها استفاده کنند. ماژول‌هایی که می‌خواهند هنگام اعمال خط‌مشی مصرف برق مطلع شوند می‌توانند شنونده تغییر خط‌مشی مصرف برق را در CarPowerManager ثبت کنند