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

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

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

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

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

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

איור 1. תרשים של מצב צריכת החשמל ב-AAOS.

הסבר על כל אחד ממצבי ההפעלה:

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

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

מיישמים מגדירים מדיניות צריכת חשמל ב-/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.

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

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

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

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

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

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

השעיית ההכנה

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

רכיבים מצב צריכת החשמל ניתן להגדרה על ידי יצרן ציוד מקורי (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