אנדרואיד בריאות

אנדרואיד 9 כולל android.hardware.health HAL 2.0, שדרוג גרסה גדול מ HAL health@1.0. ל- HAL החדש הזה יש את היתרונות הבאים:

  • הפרדה נקייה יותר בין מסגרת לקוד ספק.
  • Deprecates המיותר healthd daemon.
  • דרגות חופש גבוהות יותר להתאמה אישית של ספקים בדוחות מידע בריאות.
  • מידע נוסף על בריאות המכשיר מאשר רק סוללה.

אנדרואיד 11 כולל android.hardware.health HAL 2.1, שדרוג גרסה קטין מן health@2.0 HAL. ל- HAL החדש הזה יש את היתרונות הבאים:

  • קל יותר ליישום
  • התאמה טובה יותר לממשקי ה- API HAL הקיימים
  • הפרדת טרבל טובה יותר בקוד טעינה במצב כבוי
  • תמיכה טובה יותר למסגרת המצביעה על תקינות הסוללה של המכשיר

דרישות

התקנים המפעילים עם אנדרואיד 9 חייבים לספק את 2.0 HAL (ואסור לספק את 1.0 HAL). התקנים שאינם מפעילים עם אנדרואיד 9 אך מתכננים לעדכן את תמונת הספק לגרסת 3 של תאימות מסגרת תאימות (שוחרר ב- Android 9) חייבים להסיר יישומי 1.0 HAL קיימים ולספק את 2.0 HAL.

התקנים המפעילים עם אנדרואיד 11 חייבים לספק את 2.1 HAL (ואסור לספק את 1.0 או 2.0 HAL). התקנים שאינם משיקים עם אנדרואיד 11 אך מתכננים לעדכן את תמונת הספק לגרסה 5 של תאימות מסגרת תאימות (שוחרר ב- Android 11) חייבים להסיר יישומי 2.0 HAL קיימים ולספק את 2.1 HAL. התקנים שאינם מפעילים עם אנדרואיד 11 ואינם מתכננים לעדכן את תמונת הספק מומלץ גם לספק את 2.1 HAL.

AOSP כולל מספר ספריות עוזרים שנועדו לעזור לך ליישם את 2.1 HAL ואת המעבר מה- 1.0 HAL הישן.

טרמינולוגיה

  • health@1.0: קיצור של android.hardware.health@1.0 . מתייחס לבריאות HIDL HAL גרסה 1.0 שפורסמה ב- Android 8.0.
  • health@2.0: קיצור של android.hardware.health@2.0 . מתייחס לבריאות HIDL HAL גרסה 2.0 שפורסמה ב- Android 9.
  • health@2.1: קיצור של android.hardware.health@2.1 . מתייחס לבריאות HIDL HAL גרסה 2.1 שפורסמה באנדרואיד 11.
  • מטען: ריצת הפעלה ב-במצב כבוי טעינה מציגה כי האנימציה טעינה לטלפון.
  • התאוששות: ריצת הפעלה במצב התאוששות שיש לאחזר מידע סוללה.
  • healthd: ריצת daemon מורשה אנדרואיד שמאחזרת מידע הקשור לבריאות ומספקת אותו למסגרת.
  • מְאוּחסָן: daemon פועל אנדרואיד שמאחזרת מידע אחסון ומספקת אותו למסגרת.

בריאות ב- Android 8.x

ב- Android 8.x, רכיב הבריאות פועל כמפורט בתרשים הבא:

בריאות ב- Android 8.x

איור 1. בריאות ב- Android 8.x

בתרשים זה:

  • שיחה אחת (1) קלסר ואחת (1) hwbinder משמשות את המסגרת לתקשורת עם חומרה.
  • healthd מקשר באופן סטטי כדי libhealthd_android , libbatterymonitor , ו libbatteryservice .
  • health@1.0-impl מקשר באופן סטטי כדי libhealthd. BOARD .

כל לוח יכול להתאים שונים libhealthd. BOARD ; נקבע בזמן הבנייה לאיזה מטען, health@1.0-impl, ושחזור הקישור.

עבור מצבים אחרים:

מצב חיוב ושחזור במצב כבוי ב- Android 8.x

איור 2. בריאות 8.x אנדרואיד, מחוץ במצב טעינת התאוששות במצב

  • מטען מקשר באופן סטטי כדי libhealthd. BOARD , libhealthd_charger ו libbatterymonitor .
  • התאוששות מקשרת באופן סטטי כדי libhealthd. BOARD ו libbatterymonitor .

בריאות ב- Android 9

ב- Android 9, רכיב הבריאות פועל כמפורט בתרשים הבא: בריאות ב- Android 9

איור 3. בריאות ב- Android 9

ניסיונות המסגרת לאחזר שירות health@2.0 מן hwservicemanager . אם הוא נכשל, הוא מתקשר אל health@1.0 (באנדרואיד 8.x). נתיב הקוד הישן נשמר כך שתמונת המערכת של Android 9 תואמת את תמונת הספק אנדרואיד 8.x. המסגרת אינה מאחזרת מידע משני ה- HAL מאחר ורק גרסת שירות אחת (1.0 או 2.0) יכולה להתקיים במכשיר.

עבור מצבים אחרים:

טעינה ושחזור במצב לא פעיל ב- Android 9

איור 4. הבריאות 9 אנדרואיד, מחוץ במצב טעינה במצב התאוששות

בריאות ב- Android 11

ב- Android 11, רכיב הבריאות פועל כמפורט בתרשים הבא:

[system]
    | getService()
    V
[health@2.1-service]
        | getService(stub=true)
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

אם יישום הבריאות 2.1 אינו קיים, המערכת חוזרת לנתיב הקוד הישן כפי שתואר בסעיפים קודמים

עבור מצבים אחרים:

[       charger          ]
    | getService()      |  (legacy code path)
    V                   +-------------------------------------------------+
[health@2.1-service]                                                      |
        | getService(stub=true)                                           |
        V                                                                 |
[      health@2.0-impl-2.1-<device>.so      ]                             |
        |                                  | (device-dependent linkage)   |
        V                                  V                              |
+---------Helper libs for impl--------+   [libhealthd.device]             |
| [libhealthloop (uevent, wakealarm)] |                                   |
| [libhealth2impl (IHealth impl)    ] | <---------------------------------+
| [libbatterymonitor (battery)      ] |
+-------------------------------------+
[recovery]
        | getService() w/o hwservicemanager
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

ממשק HAL 2.0

ה- health@2.0 HAL מספק את אותה הפונקציונליות למסגרת כמו שד הבריאות הישן. הוא גם מספק APIs שדומה מה healthd ספק בעבר כשירות קלסר (כלומר IBatteryPropertiesRegistrar ).

הממשק העיקרי, IHealth , מספק את הפונקציות הבאות:

  • registerCallback , להחליף IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , להחליף IBatteryPropertiesRegistrar.unregisterListener
  • update , להחליף IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties מוחלף על ידי הבא:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

בנוסף, IHealth מספק את APIs החדש הבא של storaged לאחזר מידע בנושא האחסון ספציפי לספק:

  • getStorageInfo
  • getDiskStats

Struct חדש, @2.0::HealthInfo , מוחזר באמצעות שיחות טלפון, getHealthInfo . מבנה זה מכיל את כל מידע תקינות המכשיר הזמין דרך health@2.0 HAL, כולל:

  • מידע טעינה (AC/USB/אלחוטי, זרם, מתח וכו ')
  • מידע על הסוללה (נוכחות, רמת סוללה, זרם, מתח, טעינה, טכנולוגיה וכו ')
  • מידע אחסון (מידע על מכשיר אחסון, סטטיסטיקות דיסק)

ממשק HAL 2.1

ה- health@2.1 HAL תומך בטעינה במצב כבוי ומספק מידע נוסף על הסוללה.

הממשק העיקרי, IHealth , מספק את הפונקציות הנוספות הבאות

  • getHealthConfig : כדי לאחזר את התצורה של HAL זה
  • getHealthInfo_2_1 : שדרוג גרסה קל getHealthInfo
  • shouldKeepScreenOn : כדי לקבוע אם המסך צריך להיות כל הזמן על מצב המטען

בנוסף, היישום @2.1::IHealth נדרש תמיכה @2.1::IHealthInfoCallback עבור בירושה שלה registerCallback ו unregisterCallback פונקציות. המידע בריאות בריאות החזרי ממשק התקשרות חדשה ללקוח באמצעות שלה healthInfoChanged_2_1 פונקציה במקום בירושה healthInfoChanged פונקציה.

Struct חדש, @2.1::HealthInfo , מוחזר באמצעות שיחות טלפון, getHealthInfo_2_1 . מבנה זה מכיל מידע נוסף על בריאות המכשיר הזמין דרך health@2.0 HAL, כולל:

  • רמת קיבולת הסוללה
  • זמן טעינת הסוללה למלא כעת (תוך שניות)
  • קיבולת עיצוב הטעינה המלאה של הסוללה (ב- μAh)

למידע על הטמעת שירות הבריאות, לראות בריאות יישום .