מדיניות אספקת החשמל

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

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

מצב הספק AAOS

מכשירי AAOS פועלים לפי התרשים הבא של מצב אספקת החשמל:

תרשים מצב ההספק של AAOS

איור 1. תרשים מצב ההספק של AAOS

כל מצב של אספקת חשמל מתואר בהמשך:

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

ארכיטקטורת תוכנה

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

איור 2. ארכיטקטורת מדיניות אספקת החשמל

איך מוגדרת מדיניות אספקת החשמל?

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

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

מדיניות אספקת החשמל

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

  • AUDIO
  • MEDIA
  • DISPLAY_MAIN
  • DISPLAY_CLUSTER
  • DISPLAY_FRONT_PASSENGER
  • DISPLAY_REAR_PASSENGER
  • BLUETOOTH
  • WIFI
  • CELLULAR
  • ETHERNET
  • PROJECTION
  • NFC
  • INPUT
  • VOICE_INTERACTION
  • VISUAL_INTERACTION
  • TRUSTED_DEVICE_DETECTION
  • LOCATION
  • MICROPHONE
  • CPU

קבוצת מדיניות חזקה

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

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

ב-AAOS יש תמיכה רק במדיניות אחת של אספקת החשמל למערכת – 'ללא אינטראקציה עם המשתמש'. ההספק החשמלי של המערכת המדיניות חלה כשהמכשיר עובר למצב חנייה.

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

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

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

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

  • POWER_POLICY_REQ, ה-VHAL כותב מזהה מדיניות עוצמה לנכס הזה.
  • POWER_POLICY_GROUP_REQ, ה-VHAL כותב את מזהה הקבוצה של מדיניות החשמל לנכס הזה.

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

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

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

הדימון (daemon) של מדיניות האנרגיה של הרכב מייצא ממשקי AIDL לשימוש של HALs ותהליכים מקוריים אחרים. הם יכולים לקבל התראה כשמדיניות אספקת חשמל חדשה משתנה. במילים אחרות, מתי כל אחד מהם צריך להשתנות את מצב האנרגיה שלו.

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.
   */
  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.
   */
  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.
   */
  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.
   */
  void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback);
}

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