מדיניות צריכת חשמל

כדי לוודא שרכיבי חומרה ותוכנה (כמו תצוגה, אודיו ואינטראקציה קולית) מופעלים ומושבתים באופן סלקטיבי לפי הצורך, מערכת AAOS מספקת מדיניות צריכת חשמל, שמורכבת ממערך של מצבי הפעלה והשבתה צפויים לרכיבי חומרה ותוכנה. ‫VHAL, או שירותי ספקים עם הרשאות מערכת, יכולים להחיל מדיניות חדשה בנושא צריכת חשמל כשמצב צריכת החשמל של Android משתנה או כשמתקיימים התנאים שהם ממתינים להם.

החלת מדיניות ניהול צריכת חשמל מותרת במצבים Wait for VHAL ו-On (לפעמים עם הגבלות מסוימות). במצב Shutdown Prepare, פועל מצב Garage Mode ואסור להפריע לו בשינוי מצב ההפעלה. אי אפשר להחיל מדיניות רגילה לניהול צריכת הסוללה, אבל מדיניות מיוחדת לניהול צריכת הסוללה, שהיא מדיניות המערכת לניהול צריכת הסוללה שנקראת no user interaction, מוחלת ב-Shutdown Prepare.

מצב צריכת החשמל ב-AAOS

מכשירי AAOS פועלים לפי דיאגרמת מצבי ההפעלה הזו:

תרשים של מצב צריכת החשמל ב-AAOS

איור 1. תרשים של מצב הטעינה ב-AAOS.

בהמשך מפורט כל מצב הפעלה:

ערך תיאור
כבוי
  • לא מסופק מתח פיזי למעבד האפליקציה (AP), לזיכרון ולציוד ההיקפי.
המתנה ל-VHAL
  • כשהנהג מקיים אינטראקציה עם הרכב (לדוגמה, פותח דלת), ה-VMCU מספק חשמל ל-AP, לזיכרון ולציוד ההיקפי.
  • מערכת AAOS עוברת מאחד משלושה מצבים (מושבת, השהיה ל-RAM‏ (STR, המתנה לסיום VHAL)) ואז נכנסת למצב המתנה לסיום VHAL, שבו היא ממתינה לתיאום עם VHAL.
מופעל
  • ממשק VHAL מורה ל-AAOS לעבור למצב On. במצב הזה, מערכת AAOS פועלת באופן מלא ומקיימת אינטראקציה עם הנהג.
  • התצוגה נשלטת על ידי מדיניות ניהול צריכת החשמל ולא על ידי קריאות להפעלה או להשבתה של התצוגה ב-Android עבור גורמי צורה אחרים.
הכנות להפסקת השימוש
  • כשהנהג מפסיק לנהוג, ה-VHAL מורה ל-AAOS להיכנס למצב Shutdown Prepare (הכנה לכיבוי). במצב הזה, המסך והאודיו מושבתים ומערכת AAOS לא מבצעת אינטראקציה עם הנהג. מערכת Android עדיין פועלת ויכולה לעדכן אפליקציות ואת מערכת Android. כשהעדכונים (אם יש כאלה) מסתיימים, מערכת Android עוברת למצב המתנה לסיום VHAL.
המתנה לסיום של VHAL
  • ‫AAOS מודיע ל-VHAL שאפשר לכבות אותו. יחידת המיקרו-בקר של הרכב (VMCU) אמורה להעביר את המערכת על שבב (SoC) למצב שינה עמוקה ולהפסיק את אספקת החשמל ל-AP. לאחר מכן, מערכת AAOS נמצאת במצב STR, למרות שלא מבוצע קוד.
  • אם VHAL לא מסתיים והנהג חוזר, מערכת המולטימדיה (HU) צריכה לעבור ישירות למצב Wait for VHAL.
השעיה ל-RAM‏ (STR)
  • הרכב ומעבדת ה-AP כבויים, לא מופעל קוד והחשמל נשמר בזיכרון ה-RAM של מעבדת ה-AP.
השהיה לדיסק (STD)
  • הרכב ומעבד ה-AP כבויים, לא מתבצע קוד ולא מופעלת אספקת חשמל ליחידת העיבוד ולזיכרון ה-RAM של מעבד ה-AP.

איך מוגדרת מדיניות צריכת החשמל?

מיישמים מגדירים מדיניות צריכת חשמל ב-/vendor/etc/automotive/power_policy.xml, שכוללת:

  • הגדרת מדיניות צריכת החשמל.
  • ההגדרה מגדירה קבוצות של מדיניות בנושא צריכת חשמל, שכוללות את מדיניות ברירת המחדל בנושא צריכת חשמל ומוחלות באופן אוטומטי כשמתרחשים מעברים במצב צריכת החשמל.
  • מבטלת את מדיניות אספקת החשמל למערכת.

מדיניות צריכת החשמל

מדיניות צריכת החשמל מורכבת מקבוצה של מצבי צריכת חשמל צפויים של רכיבי חומרה ותוכנה. ‫AAOS תומך ברכיבים הבאים במדיניות צריכת החשמל:

אודיו
מדיה
תצוגה
Bluetooth
‫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>

קבוצת מדיניות בנושא צריכת חשמל

קבוצת מדיניות צריכת החשמל מציינת את מדיניות צריכת החשמל שמוגדרת כברירת מחדל, שתחול באופן אוטומטי במעברים בין מצבי צריכת חשמל. ספקים יכולים להגדיר את מדיניות ברירת המחדל לניהול צריכת החשמל עבור Wait For VHAL,‏ On ו-Wait for VHAL Finish (Deep Sleep Entry או Shutdown Start).

כללי מדיניות בנושא אספקת חשמל למערכת

ב-AAOS יש תמיכה בשני כללי מדיניות של מערכת ההפעלה בנושא צריכת חשמל: no user interaction ו-suspend prep. מדיניות ניהול צריכת החשמל של המערכת מופעלת כשהמכשיר עובר למצב שקט, למצב מוסך, למצב השעיה ל-RAM או למצב השעיה לדיסק.

בטבלאות הבאות מפורט אופן הפעולה של כל רכיב במדיניות ניהול צריכת החשמל של המערכת. מפתחים יכולים לבטל את ההגדרה של זיהוי Bluetooth,‏ NFC ומכשירים מהימנים במדיניות ניהול צריכת החשמל של המערכת ללא אינטראקציה מצד המשתמש. השינויים חלים ב-/vendor/etc/power_policy.xml.

ללא אינטראקציה של משתמש

אופן הפעולה של מדיניות ניהול צריכת החשמל של המערכת no user interaction מוגדר בטבלה הזו:

רכיבים מצב צריכת החשמל ניתן להגדרה
אודיו כבוי לא
מדיה כבוי לא
תצוגה כבוי לא
Bluetooth כבוי כן
Wi-Fi מופעל לא
רשת סלולרית מופעל לא
אתרנט מופעל לא
תחזית כבוי לא
NFC כבוי כן
קלט כבוי לא
Assistant כבוי לא
אינטראקציה של משתמשים כבוי לא
זיהוי מכשירים מהימנים להתחברות משתמשים מופעל כן
מיקום כבוי לא
מיקרופון כבוי לא
CPU מופעל לא

השעיית ההכנה

התנהגות המדיניות suspend prep בנושא ניהול צריכת החשמל של המערכת מוגדרת בטבלה הזו:

רכיבים מצב צריכת החשמל ניתן להגדרה על ידי יצרן ציוד מקורי (OEM)
אודיו כבוי לא
מדיה לא רלוונטי לא
תצוגה לא רלוונטי לא
Bluetooth כבוי לא
Wi-Fi כבוי לא
רשת סלולרית לא רלוונטי לא
אתרנט לא רלוונטי לא
תחזית לא רלוונטי לא
NFC לא רלוונטי לא
קלט לא רלוונטי לא
Assistant לא רלוונטי לא
אינטראקציה של משתמשים לא רלוונטי לא
זיהוי מכשירים מהימנים להתחברות משתמשים לא רלוונטי לא
מיקום כבוי לא
מיקרופון כבוי לא
CPU כבוי לא

אינטראקציה עם VHAL

הדמון של מדיניות ההפעלה של הרכב שפועל בשכבת המערכת רשום לשני מאפיינים כדי להאזין לבקשות מ-VHAL:

  • POWER_POLICY_REQ VHAL כותב את מזהה מדיניות המתח לנכס הזה.
  • POWER_POLICY_GROUP_REQ VHAL כותב את מזהה קבוצת מדיניות ניהול המתח למאפיין הזה.

מודולים אחרים מלבד VHAL יכולים לשנות את מדיניות ניהול צריכת הסוללה הנוכחית במערכת. במקרה כזה, דמון מדיניות צריכת החשמל של הרכב מעדכן את המאפיין CURRENT_POWER_POLICY כדי להודיע על השינוי ל-VHAL.

אינטראקציה עם תהליכי נייטיב

שירות ניהול צריכת החשמל ברכב (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