سیاست قدرت

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

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

وضعیت برق AAOS

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

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

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

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

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

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

پیاده‌کننده‌ها سیاست‌های قدرت را در /vendor/etc/automotive/power_policy.xml تعریف می‌کنند که:

  • خط مشی قدرت را تعریف می کند.
  • گروه‌های خط‌مشی توان را تعریف می‌کند که شامل خط‌مشی توان پیش‌فرض می‌شود و به‌طور خودکار هنگام انتقال وضعیت قدرت اعمال می‌شود.
  • خط مشی قدرت سیستم را لغو می کند.

سیاست قدرت

خط مشی قدرت شامل مجموعه ای از حالت های قدرت مورد انتظار قطعات سخت افزاری و نرم افزاری است. AAOS از این مؤلفه ها در خط مشی قدرت پشتیبانی می کند:

AUDIO
رسانه ها
نمایش
بلوتوث
WIFI
سلولی
اترنت
فرافکنی
NFC
ورودی
VOICE_INTERACTION
VISUAL_INTERACTION
TRUSTED_DEVICE_DETECTION
مکان
میکروفون
CPU

فروشندگان همچنین می توانند اجزای برق سفارشی خود را برای استفاده با خط مشی های قدرت تعریف کنند. مولفه های قدرت سفارشی را در همان فایل XML به عنوان پاور پالیسی ها تعریف کنید، مانند این مثال:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

گروه سیاست قدرت

خط مشی قدرت پیش‌فرض به طور خودکار در انتقال وضعیت قدرت اعمال می‌شود و در گروه سیاست قدرت مشخص می‌شود. فروشندگان می توانند خط مشی برق پیش فرض را برای Wait For VHAL، On، و Wait for VHAL Finish (ورودی در خواب عمیق یا شروع خاموش شدن) تعریف کنند.

سیاست های قدرت سیستم

AAOS از دو خط مشی قدرت سیستم پشتیبانی می کند که عبارتند از عدم تعامل کاربر و آماده سازی تعلیق. خط مشی برق سیستم زمانی اعمال می‌شود که دستگاه به حالت بی‌صدا، حالت گاراژ، تعلیق به رم یا تعلیق به دیسک می‌رود.

جداول زیر رفتار هر جزء در خط مشی قدرت سیستم را فهرست می کند. پیاده‌کننده‌ها می‌توانند بلوتوث، NFC و تشخیص دستگاه مورد اعتماد را در خط‌مشی قدرت سیستم تعامل بدون کاربر لغو کنند. لغو در /vendor/etc/power_policy.xml اعمال می شود.

بدون تعامل کاربر

رفتار سیاست قدرت سیستم تعامل بدون کاربر در این جدول تعریف شده است:

اجزاء وضعیت قدرت قابل تنظیم
صوتی خاموش خیر
رسانه ها خاموش خیر
نمایش خاموش خیر
بلوتوث خاموش بله
فای روشن خیر
سلولی روشن خیر
اترنت روشن خیر
فرافکنی خاموش خیر
NFC خاموش بله
ورودی خاموش خیر
دستیار خاموش خیر
تعامل کاربر خاموش خیر
تشخیص دستگاه مورد اعتماد برای ورود کاربر روشن بله
مکان خاموش خیر
میکروفون خاموش خیر
CPU روشن خیر

تعلیق آمادگی

رفتار خط مشی قدرت سیستم آماده سازی تعلیق در این جدول تعریف شده است:

اجزاء وضعیت قدرت OEM قابل تنظیم
صوتی خاموش خیر
رسانه ها N/A خیر
نمایش N/A خیر
بلوتوث خاموش خیر
فای خاموش خیر
سلولی N/A خیر
اترنت N/A خیر
فرافکنی N/A خیر
NFC N/A خیر
ورودی N/A خیر
دستیار N/A خیر
تعامل کاربر N/A خیر
تشخیص دستگاه مورد اعتماد برای ورود کاربر N/A خیر
مکان خاموش خیر
میکروفون خاموش خیر
CPU خاموش خیر

تعامل با VHAL

دیمون خط مشی قدرت خودرو که در لایه سیستم اجرا می شود، دو ویژگی را برای گوش دادن به درخواست های VHAL مشترک می کند:

  • POWER_POLICY_REQ VHAL شناسه خط مشی قدرت را در این ویژگی می نویسد.
  • POWER_POLICY_GROUP_REQ VHAL شناسه گروه خط مشی قدرت را در این ویژگی می نویسد.

خط مشی برق فعلی در سیستم را می توان توسط ماژول هایی غیر از VHAL تغییر داد. در آن صورت، دیمون خط مشی برق خودرو، ویژگی CURRENT_POWER_POLICY را به‌روزرسانی می‌کند تا تغییر VHAL را اعلام کند.

تعامل با فرآیندهای بومی

همانطور که در بالا ذکر شد، شبح سیاست قدرت خودرو در لایه سیستم اجرا می شود و از نظر مدیریت خط مشی قدرت، تقریباً همان عملکرد CPMS در حال اجرا در لایه چارچوب را ارائه می دهد. همچنین فرض کنید دیمون خط مشی برق خودرو و CPMS به طور کامل همگام شده اند.

دیمون خط مشی قدرت خودرو، رابط های 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 ثبت کنند.