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

כדי לתמוך בניהול צריכת חשמל ספציפי לרכב, אנדרואיד מספקת שירות CarPowerManagementService וממשק CarPowerManager .

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

טרמינולוגיה

מונחים אלה משמשים בכל מסמך זה:

מעבד אפליקציות (AP)
חלק מהמערכת על שבב (SoC) .
חבילת תמיכה בלוח (BSP)
שכבת התוכנה המכילה קושחת אתחול ספציפית לחומרה ומנהלי התקנים המאפשרים למערכת הפעלה משובצת לפעול בסביבת חומרה נתונה (לוח אם), המשולבת עם מערכת ההפעלה המשובצת.
CarPowerManager (CPM)
חושף ממשק API לאפליקציות להירשם לשינויים במצב הספק.
CarPowerManagementService (CPMS)
מיישם את מכונת מצב הכוח של המכונית, מתממשק עם VHAL ומבצע את הקריאות הסופיות ל- suspend() ו- shutdown() .
CarPowerPolicyDaemon (CPPD)
חושף את ממשקי ה-AIDL עבור תהליכים מקוריים לרישום מאזין מדיניות כוח.
קלט או פלט לשימוש כללי (GPIO)
סיכת אות דיגיטלית לשימוש כללי.
שכבת הפשטת החומרה (HAL)
שכבת תוכנה שכל המודולים האחרים ברמה גבוהה יותר חייבים לקיים איתה אינטראקציה על מנת לגשת לפונקציונליות החומרה.
למצב שינה
מכונה גם השעיה לדיסק (S2D/S4). ה-SoC מוכנס למצב הפעלה S4 (מצב שינה) ותוכן RAM נכתב למדיה לא נדיפה (כגון פלאש או דיסק) והמערכת כולה כבויה.
מעבד מדיה (MP)
ראה מערכת על שבב (SoC) .
מעגל משולב לניהול אנרגיה (PMIC)
שבב משמש לניהול דרישות הספק עבור המערכת המארחת.
מערכת על שבב (SoC)
מעבד ראשי המריץ AAOS, מסופק בדרך כלל על ידי יצרנים כגון Intel, MediaTek, Nvidia, Qualcomm, Renesas ו-Texas Instruments.
לְהַשְׁעוֹת
מכונה גם Suspend-to-RAM (S2R או STR). ה-SoC ממוקם במצב צריכת חשמל S3 וה-CPU כבוי בזמן שה-RAM נשאר מופעל.
רכב HAL (VHAL)
ה-API של אנדרואיד נהג להתממשק עם רשת הרכב. שותף Tier 1 או OEM אחראי לכתיבת מודול זה. רשת הרכב יכולה להשתמש בכל שכבה פיזית (כגון CAN, LIN, MOST ו-Ethernet). ה-VHAL מפשט את רשת הרכבים הזו כדי לאפשר ל-AAOS ליצור אינטראקציה עם הרכב.
מעבד ממשק רכב (VIP)
ראה MCU של רכב.
יחידת הבקרה הראשית לרכב (VMCU)
המיקרו-בקר המספק את הממשק בין רשת הרכב ל-SoC. ה-SoC מתקשר עם ה-VMCU באמצעות אותות USB, UART, SPI ו-GPIO.

עיצוב מערכת

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

מכונת מצב כוח רכב

AAOS משתמש במכונת מצב כדי לייצג את מצב הכוח של ה-AP. מכונת המצב מספקת את המצבים המוצגים להלן:

מכונת מצב כוח רכב

איור 1. מכונת מצב כוח רכב.

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

  • השעיה ל-RAM. הרכב וה-SoC כבויים. שום קוד לא מופעל. מתח נשמר ל-SoC RAM.
  • המתן ל-VHAL. כאשר הנהג מקיים אינטראקציה עם הרכב, למשל, על ידי פתיחת דלת, ה-VMCU מפעיל מתח ל-SoC. AAOS מתחדש מ-Suspend-to-RAM ונכנס ל-Wit for VHAL, שם הוא ממתין לתיאום עם ה-VHAL.
  • עַל. ה-VHAL אומר ל-AAOS להיכנס למצב מופעל. במצב זה, AAOS פועל במלואו ומקיים אינטראקציה עם מנהל ההתקן.
  • כיבוי הכנה. כאשר הנהג מסיים בנהיגה, ה-VHAL אומר ל-AAOS להיכנס לכיבוי הכנה. במצב זה, התצוגה והשמע כבויים ו-AAOS אינו מקיים אינטראקציה עם מנהל ההתקן. מערכת אנדרואיד עדיין פועלת והיא חינמית לעדכון אפליקציות ומערכת אנדרואיד. כאשר הושלמו עדכונים, אם קיימים, מערכת אנדרואיד נכנסת ל-Wit for VHAL Finish.
  • המתן לסיום VHAL. בשלב זה, AAOS מודיע ל-VHAL שהוא מוכן לכיבוי. ה-VMCU צפוי למקם את ה-SoC בשינה עמוקה ולהסיר חשמל ממעבד האפליקציה. AAOS נמצא אז במצב Suspend-to-RAM, למרות ששום קוד לא מבוצע.

מודולים לניהול חשמל

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

שם המודול תיאור
CarPowerManager Java או C++ API.
CarPowerManagementService מתאם את מעברי מצב הכוח.
CarPowerPolicyDaemon מתקשר עם לקוחות מדיניות הכוח המקומיים.
רכב HAL ממשק ל-VMCU.
גַרעִין השעה למימוש RAM או דיסק.

תכונת השינה/התרדמה העמוקה (השעיית אנדרואיד ל-RAM/דיסק) מיושמת בקרנל. תכונה זו חשופה למרחב המשתמש כקובץ מיוחד הממוקם ב- /sys/power/state . AAOS מושעה על ידי כתיבת mem או disk לקובץ זה.

ה-CPMS מתאם את מצב הכוח עם שירותים ו-HALs אחרים. ה-CPMS מיישם את מכונת המצב שתוארה לעיל ושולח הודעות לכל צופה כאשר מתרחש מעבר מצב כוח. שירות זה משתמש גם ב-VHAL כדי לשלוח הודעות לחומרה.

ה-CPPD מנהל את מדיניות החשמל עד שה-CPMS משתלט. זה גם שולח הודעות על שינוי מדיניות צריכת חשמל למאזינים המקומיים.

חלק מהמאפיינים מוגדרים ב-VHAL. כדי לתקשר עם ה-VMCU, ה-CPMS קורא וכותב את המאפיינים הללו. אפליקציות יכולות להשתמש בממשק שהוגדר ב-CPM כדי לנטר שינויים במצב הספק. ממשק זה גם מאפשר לאפליקציות לרשום מאזינים למדיניות צריכת חשמל . ניתן לקרוא ל-API הזה מ-Java והוא מסומן ב-@hide / @System API, מה שאומר שהוא זמין לאפליקציות מורשות בלבד . הקשר בין המודולים, האפליקציות והשירותים הללו מודגם להלן:

דיאגרמת התייחסות לרכיבי חשמל

איור 2. תרשים התייחסות לרכיבי חשמל.

רצף הודעות

הסעיף הקודם תיאר את המודולים המרכיבים את מערכת ניהול החשמל. חלק זה משתמש בדוגמאות של כניסה לשינה עמוקה ויציאה משינה עמוקה כדי להסביר כיצד המודולים והאפליקציות מתקשרים:

היכנס לשינה עמוקה

רק ה-VMCU יכול להתחיל שינה עמוקה. לאחר תחילת שינה עמוקה, ה-VMCU שולח הודעה ל-CPMS דרך ה-VHAL. ה-CPMS משנה את המצב ל-SHUTDOWN PREPARE ומשדר את מעבר המצב הזה לכל הצופים (האפליקציות והשירותים שמנטרים CPMS) על ידי קריאה לשיטת onStateChanged() עם מזהה מצב חדש שסופק על ידי ה-CPM.

ה-CPM מתווך בין האפליקציות/שירותים ל-CPMS. שיטת onStateChanged() עבור האפליקציות/שירותים מופעלת באופן סינכרוני בשיטת onStateChanged() של CPM. רוב האפליקציות והשירותים נדרשים להשלים את הכנתם לפני החזרה משיחה זו. שירותים מורשים רשאים להמשיך בהכנות שלהם באופן אסינכרוני לאחר החזרה עבור PRE_SHUTDOWN_PREPARE , SUSPEND_ENTER , POST_SUSPEND_ENTER . במקרה זה, השירות הפריבילגי אמור לקרוא ל- complete() באובייקט CompletablePowerStateChangeFuture שסופק כאשר הוא מסיים את הכנתו. שים לב שהכנה אסינכרונית אינה מותרת עבור SHUTDOWN_PREPARE . לפני DEEP_SLEEP_ENTRY נשלח ל-VHAL, ה-CPMS שולח מעת לעת בקשות לדחיית כיבוי ל-VHAL.

כאשר כל אובייקטי ה-CPM השלימו את הכנות הכיבוי, ה-CPMS שולח את AP_POWER_STATE_REPORT ל-VHAL, ולאחר מכן מודיע ל-VMCU שה-AP מוכן להשעיה. ה-CPMS קורא גם לשיטת ההשעיה שלו, שמשהה את הליבה.

הרצף המתואר לעיל מודגם להלן:

היכנס לשינה עמוקה

איור 3. היכנס לשינה עמוקה.

ממשקי תכנות הניתנים על ידי CPM

סעיף זה מתאר את Java API המסופק על ידי CPM עבור אפליקציות ושירותי מערכת. ממשק API זה מאפשר לתוכנת המערכת:

  • עקוב אחר שינויים במצב הכוח ב-AP.
  • החל מדיניות צריכת חשמל.

השתמש בשלבים הבאים כדי לקרוא לממשקי ה-API שסופקו על ידי העלות לאלף חשיפות:

  1. כדי לרכוש את מופע המחיר לאלף הופעות, התקשר ל-Car API.
  2. קרא את השיטה המתאימה על האובייקט שנוצר בשלב 1.

צור אובייקט CarPowerManager

כדי ליצור אובייקט CPM, קרא למתודה getCarManager() של האובייקט Car. שיטה זו היא חזית המשמשת ליצירת אובייקטי CPM. ציין את android.car.Car.POWER_SERVICE כארגומנט ליצירת אובייקט CPM.

Car car = Car.createCar(this);
CarPowerManager powerManager =
  (CarPowerManager) car.getCarManager(android.car.Car.POWER_SERVICE);

CarPowerStateListener ורישום

אפליקציות ושירותי מערכת יכולים לקבל התראות על שינוי מצב כוח על ידי הטמעת CarPowerManager.CarPowerStateListener . ממשק זה מגדיר שיטה אחת onStateChanged() , שהיא פונקציית callback המופעלת כאשר מצב הכוח של CPMS משתנה. הדוגמה הבאה מגדירה מחלקה אנונימית חדשה המיישמת את הממשק:

private final CarPowerManager.CarPowerStateListener powerListener =
  new CarPowerManager.CarPowerStateListener () {
    @Override
     public void onStateChanged(int state) {
       Log.i(TAG, "onStateChanged() state = " + state);
     }
};

כדי להורות לאובייקט מאזין זה לפקח על מעבר מצב כוח, צור שרשור ביצוע חדש ורשום את המאזין ואת השרשור הזה לאובייקט CPM:

executor = new ThreadPerTaskExecutor();
powerManager.setListener(powerListener, executor);

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

שֵׁם תיאור
STATE_ON הכנס למצב מופעל. המערכת פועלת במלואה.
STATE_SHUTDOWN_CANCELLED הכיבוי מבוטל ומצב החשמל חוזר למצב הרגיל.
STATE_SHUTDOWN_ENTER אפליקציות צפויות להתנקות ולהיות מוכנות לכיבוי.
STATE_POST_SHUTDOWN_ENTER ההכנות לכיבוי הושלמו ו-VMCU מוכן לכיבוי. היכנס למצב הכיבוי.
STATE_PRE_SHUTDOWN_PREPARE תהליך כיבוי מתבקש אך CPMS עדיין לא מתחיל בתהליך. התצוגה והשמע עדיין פועלים
STATE_SHUTDOWN_PREPARE מצב מוסך עשוי לפעול במהלך התקופה.
STATE_SUSPEND_ENTER אפליקציות צפויות להתנקות ולהיות מוכנות להשעיה ל-RAM.
STATE_POST_SUSPEND_ENTER ההכנות להשעיה ל-RAM הושלמו ו-VMCU מוכן להשהייה ל-RAM. היכנס למצב ההשעיה.
STATE_SUSPEND_EXIT להתעורר מהשעיה או לחדש מהשעיה שבוטלה.
STATE_HIBERNATION_ENTER אפליקציות צפויות להתנקות ולהיות מוכנות למצב שינה.
STATE_POST_HIBERNATION_ENTER ההכנות לתרדמה הושלמו ו-VMCU מוכן למצב תרדמה היכנס למצב שינה.
STATE_HIBERNATION_EXIT התעורר ממצב שינה או המשך ממצב שינה שבוטל.
STATE_WAIT_FOR_VHAL המערכת מופעלת, אך ממתינה ליצירת תקשורת עם ה-VHAL לפני שהיא עוברת למצב ON.

ביטול הרישום של CarPowerStateListener

כדי לבטל את הרישום של כל אובייקטי המאזין הרשומים ל-CPM, קרא לשיטת clearListener :

powerManager.clearListener();

שילוב מערכת ביישום האנדרואיד שלך

האינטגרטורים אחראים לפריטים הבאים:

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

ממשק ליבה: /sys/power/state

AAOS מכניס מכשיר למצב השעיה כאשר אפליקציה או שירות כותבים mem עבור השעיה ל-RAM או disk עבור השעיה לדיסק לתוך קובץ שנמצא ב- /sys/power/state . האינטגרטור חייב לספק פונקציה שמנטרת את הקובץ הזה ומכניסה את לינוקס למצב השהיית חשמל. פונקציה זו עשויה לשלוח GPIO ל-VMCU כדי להודיע ​​ל-VMCU שהמכשיר כבה לחלוטין. האינטגרטור אחראי גם להסרת כל תנאי מירוץ בין VHAL שליחת ההודעה הסופית ל-VMCU לבין שהמערכת עוברת למצב השעיה או כיבוי.

אחריות VHAL

ה-VHAL מספק ממשק בין רשת הרכב לאנדרואיד. ה-VHAL:

  • מפיץ את התחלת השעיה או כיבוי מהמכונית לאנדרואיד.
  • שולח את הודעת הכיבוי מוכן מאנדרואיד לרכב.
  • יוזם כיבוי או השעיה של אנדרואיד דרך ממשק ליבת לינוקס.

כאשר ה-CPMS מודיע ל-VHAL שהוא מוכן לכיבוי, ה-VHAL שולח את הודעת הכיבוי מוכן ל-VMCU. בדרך כלל, ציוד היקפי על-שבב כגון UART, SPI ו-USB משדרים את ההודעה. ברגע שההודעה נשלחה, ה-CPMS קורא לפקודת הליבה כדי להשעות או לכבות את המכשיר. לפני שתעשה זאת, ה-VHAL או BSP עשויים להחליף GPIO כדי להורות ל-VMCU שבטוח לנתק את החשמל מהמכשיר.

ה-VHAL חייב לתמוך במאפיינים הבאים, השולטים בניהול צריכת החשמל באמצעות ה-VHAL:

שֵׁם תיאור
AP_POWER_STATE_REPORT אנדרואיד מדווח על מעברי מצב ל-VMCU עם מאפיין זה, תוך שימוש בערכי ה-Enum של VehicleApPowerStateReport.
AP_POWER_STATE_REQ ה-VMCU משתמש במאפיין זה כדי להורות לאנדרואיד לעבור למצבי הספק שונים, תוך שימוש בערכי ה-Enum של VehicleApPowerStateReq.

AP_POWER_STATE_REPORT

השתמש במאפיין זה כדי לדווח על מצב ניהול החשמל הנוכחי של Android. מאפיין זה מכיל שני מספרים שלמים:

  • int32Values[0] : Enum של VehicleApPowerStateReport של המצב הנוכחי.
  • int32Values[1] : זמן באלפיות שניות לדחייה או שינה או כיבוי. המשמעות של ערך זה תלויה בערך הראשון.

הערך הראשון יכול לקבל אחד מהערכים הבאים. VehicleApPowerStateReport.aidl מכיל תיאורים ספציפיים יותר, המאוחסנים hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle .

שם ערך תיאור ערך שני
WAIT_FOR_VHAL AP מתחיל וצריך ליצור תקשורת עם ה-VHAL.
DEEP_SLEEP_ENTRY AP נכנס למצב שינה עמוקה. ה-VMCU צריך להפעיל מחדש את ה-AP לאחר הזמן שצוין בערך השני. חייב להיות מוגדר
DEEP_SLEEP_EXIT AP יוצאת ממצב שינה עמוקה.
HIBERNATION_ENTRY AP נכנסת למצב שינה. ה-VMCU צריך להפעיל מחדש את ה-AP לאחר הזמן שצוין בערך השני. חייב להיות מוגדר
HIBERNATION_EXIT AP יוצאת ממצב שינה.
SHUTDOWN_POSTPONE אנדרואיד לא מוכן לכיבוי. ה-VMCU צריך להמתין את הזמן שצוין בערך השני לפני כיבוי ה-AP. Android עשויה לבקש דחייה נוספת על ידי הנפקת דוחות SHUTDOWN_POSTPONE נוספים. חייב להיות מוגדר
SHUTDOWN_PREPARE אנדרואיד מתכוננת להשבתה. חייב להיות מוגדר
SHUTDOWN_START AP מוכנה להשבתה. ה-VMCU צריך להפעיל מחדש את ה-AP לאחר הזמן שצוין בערך השני. (ה-VMCU אינו נדרש לתמוך בתכונת ההדלקה המתוזמנת.) חייב להיות מוגדר
SHUTDOWN_CANCELLED אנדרואיד מפסיקה להתכונן לכיבוי ותמשיך ל-WAIT_FOR_VHAL.
עַל אנדרואיד פועל כרגיל.

ניתן להגדיר את המצב באופן אוטונומי או בתגובה לבקשה באמצעות ה-VMCU.

AP_POWER_STATE_REQ

מאפיין זה נשלח על ידי ה-VMCU כדי להעביר את אנדרואיד למצב כוח שונה ומכיל שני מספרים שלמים:

  • int32Values[0] : ערך enum VehicleApPowerStateReq , המייצג את המצב החדש שאליו יש לעבור.
  • int32Values[1] : VehicleApPowerStateShutdownParam ערך enum. ערך זה נשלח רק עבור הודעת SHUTDOWN_PREPARE ומשדר לאנדרואיד את האפשרויות שהוא מכיל.

הערך השלם הראשון מייצג את המצב החדש שאליו אמורה אנדרואיד לעבור. הסמנטיקה מוגדרת ב- VehicleApPowerStateReq.aidl ומסופקת להלן:

שם ערך תיאור
עַל AP אמור להתחיל בפעולה מלאה.
SHUTDOWN_PREPARE ה-AP צריך להתכונן לסגירה. הערך השני מציין אם ה-AP רשאי לדחות את הכיבוי והאם ה-AP צריך לצפות לכבות או להיכנס לשינה עמוקה.
CANCEL_SHUTDOWN ה-AP צריך להפסיק להתכונן לכיבוי ולהתכונן להפעלה.
גָמוּר כעת ה-AP ייסגר או יושעה.

VehicleApPowerStateShutdownParam מוגדר ב- VehicleApPowerStateShutdownParam.aidl . הרשימה הזו כוללת את האלמנטים הבאים:

שם ערך תיאור
יכול לישון AP יכול להיכנס לשינה עמוקה במקום להיסגר לחלוטין. מותר לדחות.
CAN_HIBERNATE AP יכול להיכנס למצב שינה במקום להיסגר לחלוטין. מותר לדחות.
SHUTDOWN_ONLY AP צריך להיסגר. מותר לדחות. שינה עמוקה אסורה.
SLEEP_IMMEDIATELY AP עשוי להיכנס לשינה עמוקה, אך חייב לישון או להיסגר מיד. אסור לדחות.
HIBERNATE_IMMEDIATELY AP עשויה להיכנס להשהיה לדיסק, אך חייבת במצב שינה או לכבות מיד. אסור לדחות.
SHUTDOWN_IMMEDIATELY AP חייבת לסגור מיד. אסור לדחות. שינה עמוקה אסורה.

מקורות התעוררות

האינטגרטור חייב להשבית את מקורות ההתעוררות המתאימים כאשר המכשיר נמצא במצב השהייה. מקורות השכמה נפוצים כוללים פעימות לב, מודם, Wi-Fi ו-Bluetooth. מקור ההתעוררות התקף היחיד חייב להיות פסיקה מה-VMCU כדי להעיר את ה-SoC. זה מניח שה-VMCU יכול להאזין למודם לאירועי השכמה מרחוק (כגון התנעת מנוע מרחוק). אם פונקציונליות זו נדחפת ל-AP, יש להוסיף מקור ערה נוסף לשירות המודם.

אפליקציות

יצרני OEM חייבים להקפיד לכתוב אפליקציות כך שניתן יהיה לכבות אותן במהירות ולא לדחות את התהליך ללא הגבלת זמן.

נִספָּח

ספריות בעץ קוד המקור

תוֹכֶן מַדרִיך
קוד הקשור ל-CarPowerManager. packages/services/Car/car-lib/src/android/car/hardware/power
CarPowerManagementService וכן הלאה. packages/services/Car/service/src/com/android/car/power
שירותים העוסקים ב-VHAL, כגון VehicleHal ו- HAlClient . packages/services/Car/service/src/com/android/car/hal
ממשק VHAL והגדרות נכסים. hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle/
אפליקציה לדוגמה כדי לספק מושג כלשהו לגבי ה- CarPowerManager packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink

תרשים כיתתי

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

דיאגרמת מחלקת כוח

איור 4. דיאגרמת מחלקות כוח.

יחסי אובייקט

איור 5 ממחיש לאילו אובייקטים יש הפניות לאובייקטים אחרים. קצה אומר שאובייקט המקור מכיל הפניה לאובייקט היעד. לדוגמה, ל- VehicleHAL יש הפניה לאובייקט PropertyHalService.

דיאגרמת התייחסות לאובייקט

איור 5. דיאגרמת התייחסות לאובייקט.