כדי לוודא שרכיבי החומרה והתוכנה (כמו המסך, האודיו והאינטראקציה הקולית) מופעלים ומושבתים באופן סלקטיבי לפי הצורך, מערכת AAOS מספקת מדיניות צריכת חשמל, שמכילה קבוצה של מצבי הפעלה וכיבוי צפויים של רכיבי החומרה והתוכנה. VHAL, או שירותי ספקים עם הרשאות מערכת, יכולים להחיל מדיניות צריכת אנרגיה חדשה כשמצב צריכת האנרגיה של Android עובר שינוי או כשהתנאים שהם ממתינים להם מתקיימים.
מותר להחיל מדיניות צריכת חשמל בסטטוסים 'המתנה ל-VHAL' ו'מופעל' (לפעמים עם הגבלות מסוימות). בשלב 'הכנה לטעינה', מצב המוסך פועל ולא אמור להיות מופרע על ידי שינוי במצב החשמל. אי אפשר להחיל מדיניות צריכת חשמל רגילה, אבל ב-Shutdown Prepare חלה מדיניות צריכת חשמל מיוחדת, שהיא מדיניות צריכת החשמל של המערכת שנקראת 'אין אינטראקציה של משתמש'.
מצב הטעינה של AAOS
במכשירי AAOS חל התרשים הבא של מצבי צריכת החשמל:
איור 1. תרשים של מצב הטעינה ב-AAOS.
אלה שלושת מצבי ההפעלה:
ערך | תיאור |
---|---|
מושבתת |
|
המתנה ל-VHAL |
|
הפעלה |
|
הכנה לביטול |
|
ממתינים לסיום ה-VHAL |
|
השהיה ב-RAM (STR) |
|
השהיה בדיסק (STD) |
|
איך מוגדרת מדיניות צריכת החשמל?
המטמיעים מגדירים את כללי מדיניות צריכת החשמל ב-/vendor/etc/automotive/power_policy.xml
,
שמאפשרים:
- הגדרת מדיניות צריכת החשמל.
- הגדרת קבוצות של מדיניות צריכת חשמל, שכוללות את מדיניות צריכת החשמל שמוגדרת כברירת מחדל, ומיושמות באופן אוטומטי כשמתרחשים מעברים במצבי צריכת החשמל.
- מבטלת את מדיניות אספקת החשמל למערכת.
מדיניות צריכת חשמל
מדיניות צריכת החשמל מורכבת מקבוצה של מצבי צריכת חשמל צפויים של רכיבי חומרה ותוכנה. אלה הרכיבים שנתמכים ב-AAOS במדיניות צריכת החשמל:
AUDIO MEDIA DISPLAY BLUETOOTH |
Wi-Fi סלולר 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 (כניסה למצב שינה עמוקה או התחלת כיבוי).
כללי מדיניות לשימוש בחשמל במערכת
ב-AAOS יש תמיכה בשתי מדיניות צריכת אנרגיה של המערכת: no user interaction ו-suspend prep. מדיניות צריכת החשמל של המערכת חלה כשהמכשיר עובר למצב שקט, למצב 'חניה', להשהיה ב-RAM או להשהיה בדיסק.
בטבלאות הבאות מפורט ההתנהגות של כל רכיב במדיניות צריכת האנרגיה של המערכת.
מי שמטמיע את המדיניות יכול לשנות את הגדרות החשמל של המערכת ל-no user interaction כדי לשנות את המדיניות של זיהוי Bluetooth, NFC ומכשירים מהימנים. החלפות חלות ב-/vendor/etc/power_policy.xml
.
ללא אינטראקציה של משתמשים
ההתנהגות של מדיניות צריכת החשמל של המערכת ללא אינטראקציה של משתמשים מוגדרת בטבלה הבאה:
רכיבים | מצב הסוללה | ניתן להגדרה |
---|---|---|
אודיו | מושבתת | לא |
מדיה | מושבתת | לא |
תצוגה | מושבתת | לא |
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 שפועל בשכבת המסגרת. בנוסף, נניח שהדמיון (daemon) של מדיניות הזנת המתח ברכב ו-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); }
אינטראקציה עם מודולים של Java
CarPowerManager
מספק שיטות להפעלת ניהול מדיניות צריכת החשמל:
- אחזור של מדיניות המתח הנוכחית
- החלת מדיניות צריכת חשמל חדשה
- הגדרת קבוצה חדשה של מדיניות צריכת חשמל
רק מודולים עם הרשאות מערכת יכולים להשתמש בשיטות האלה. מודולים שרוצים לקבל הודעה כשמדיניות צריכת החשמל חלה עליהם יכולים לרשום CarPowerManager
כמאזין לשינויים במדיניות צריכת החשמל.