سیاست قدرت

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

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

وضعیت توان AAOS

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

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

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

هر حالت قدرت در زیر شرح داده شده است:

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

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

مجریان، سیاست‌های قدرت را در /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_REQ VHAL شناسه سیاست قدرت را در این ویژگی می‌نویسد.
  • POWER_POLICY_GROUP_REQ VHAL شناسه گروه سیاست قدرت را در این ویژگی می‌نویسد.

سیاست مصرف برق فعلی در سیستم می‌تواند توسط ماژول‌هایی غیر از 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 ثبت کنند.