سلامت سیستم اندروید

اندروید ۱۳ شامل android.hardware.health AIDL HAL است که تبدیلی از health@2.1 HAL محسوب می‌شود. این HAL جدید مزایای زیر را دارد:

  • APIهای مربوط به شارژر که استفاده نمی‌شوند را حذف کنید
  • حذف StorageAttribute و فیلدهای مرتبط استفاده نشده
  • پشتیبانی از شارژ داک

اندروید ۱۱ شامل android.hardware.health HAL 2.1 است که یک نسخه ارتقا یافته جزئی از health@2.0 HAL است. این HAL جدید مزایای زیر را دارد:

  • جداسازی تمیزتر بین کد چارچوب و کد فروشنده.
  • درجات آزادی بیشتر برای سفارشی‌سازی فروشنده در گزارش‌های اطلاعات سلامت.
  • اطلاعات بیشتر در مورد سلامت دستگاه، فراتر از باتری.

مستندات مربوط به پیاده‌سازی Health 2.1 HAL به عنوان مرجع در این صفحه قرار دارد.

الزامات

این بخش شامل الزامات مربوط به اندروید ۱۱، ۱۲ و ۱۳ یا بالاتر است.

دستگاه‌هایی که اندروید ۱۱ و اندروید ۱۲ را اجرا می‌کنند

دستگاه‌هایی که با اندروید ۱۱ و ۱۲ عرضه می‌شوند باید HAL نسخه ۲.۱ یا AIDL HAL را ارائه دهند. دستگاه‌هایی که با اندروید ۱۱ یا ۱۲ عرضه نمی‌شوند اما قصد دارند ایمیج فروشنده را به ماتریس سازگاری چارچوب هدف نسخه ۵ (منتشر شده در اندروید ۱۱) یا ۶ (منتشر شده در اندروید ۱۲) به‌روزرسانی کنند، باید پیاده‌سازی‌های موجود HAL نسخه ۲.۰ را حذف کرده و HAL نسخه ۲.۱ یا AIDL HAL را ارائه دهند. به دستگاه‌هایی که با اندروید ۱۱ عرضه نمی‌شوند و قصد به‌روزرسانی ایمیج فروشنده را ندارند نیز توصیه می‌شود HAL نسخه ۲.۱ یا AIDL را ارائه دهند.

AOSP شامل چندین کتابخانه کمکی است که برای کمک به شما در پیاده‌سازی HAL نسخه ۲.۱ و گذار از HALهای قدیمی HIDL طراحی شده‌اند.

دستگاه‌های دارای اندروید ۱۳ و بالاتر

دستگاه‌هایی که با اندروید ۱۳ عرضه می‌شوند باید AIDL HAL را ارائه دهند (و نباید HIDL HAL را ارائه دهند). دستگاه‌هایی که با اندروید ۱۳ عرضه نمی‌شوند اما قصد دارند ایمیج فروشنده را به ماتریس سازگاری چارچوب هدف نسخه ۷ (منتشر شده در اندروید ۱۳) به‌روزرسانی کنند، باید پیاده‌سازی‌های موجود HIDL HAL را حذف کرده و AIDL HAL را ارائه دهند. به دستگاه‌هایی که با اندروید ۱۳ عرضه نمی‌شوند و قصد به‌روزرسانی ایمیج فروشنده را ندارند نیز توصیه می‌شود AIDL HAL را ارائه دهند.

AOSP شامل چندین کتابخانه کمکی است که برای کمک به شما در پیاده‌سازی AIDL HAL و گذار از HALهای قدیمی HIDL طراحی شده‌اند.

اصطلاحات

اصطلاحاتی که باید قبل از خواندن بقیه مستندات سلامت سیستم اندروید بدانید، در ادامه آمده است:

سلامت@2.1
مخفف android.hardware.health@2.1 است. نسخه ۱ HIDL سلامت در اندروید ۱۱ منتشر شد.
سلامت AIDL HAL
مخفف android.hardware.health است. نسخه ۱ از ابزار سلامت AIDL HAL در اندروید ۱۳ منتشر شد.
شارژر
فایل اجرایی که در حالت شارژ خاموش اجرا می‌شود و انیمیشن شارژ شدن گوشی را نمایش می‌دهد.
بهبودی
فایل اجرایی که در حالت ریکاوری اجرا می‌شود و باید اطلاعات باتری را بازیابی کند.
ذخیره شده
دیمونی که اطلاعات ذخیره‌سازی را بازیابی کرده و در اختیار فریم‌ورک قرار می‌دهد.

سلامت در اندروید ۱۱ و ۱۲

در اندروید ۱۱ و ۱۲، بخش سلامت (health) مطابق نمودار زیر عمل می‌کند:

[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)      ] |
+-------------------------------------+

برای حالت‌های دیگر:

[       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)      ] |
+-------------------------------------+

برای حالت‌های مختلف، نمودار ساده‌شده‌ی زیر را ببینید:

زیرساخت سلامت HIDL HAL 2.1

شکل 1. زیرساخت سلامت HIDL HAL 2.1.

سلامت در اندروید ۱۳

در اندروید ۱۳، بخش سلامت AIDL HAL معرفی شده است. شکل ۲ نحوه عملکرد بخش سلامت را نشان می‌دهد:

زیرساخت‌های بهداشت AIDL HAL

شکل 2. زیرساخت HAL AIDL سلامت.

رابط HIDL 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 ارث‌بری‌شده، به کلاینت برمی‌گرداند.

یک ساختار جدید، @2.1::HealthInfo ، با استفاده از callbackها و getHealthInfo_2_1 بازگردانده می‌شود. این ساختار شامل اطلاعات اضافی در مورد سلامت دستگاه است که از طریق health@2.0 HAL در دسترس است، از جمله:

  • سطح ظرفیت باتری
  • زمان شارژ کامل باتری (بر حسب ثانیه)
  • ظرفیت طراحی باتری در حالت شارژ کامل (بر حسب میکرو آمپر ساعت)

شکل 3 نمودار UML از کلاس‌های مفید برای پیاده‌سازی HAL سلامت را نشان می‌دهد:

نمودار UML سلامت ۲.۱ HAL

شکل ۳. نمودار UML سلامت HAL 2.1.

برای اطلاعات بیشتر در مورد پیاده‌سازی سرویس سلامت ۲.۱، به بخش پیاده‌سازی سلامت ۲.۱ مراجعه کنید.

رابط کاربری AIDL HAL نسخه ۱

این بخش شامل اطلاعاتی در مورد رابط AIDL HAL نسخه ۱ است.

تغییرات API

رابط برنامه‌نویسی AIDL نسخه ۱ HAL از APIهای مشابه HIDL 2.1 HAL پشتیبانی می‌کند. در مقایسه با رابط HIDL 2.1، موارد زیر در API تغییر کرده‌اند:

  • APIهای مرتبط با شارژر که در HIDL HAL 2.1 معرفی شده‌اند، به AIDL HAL منتقل نمی‌شوند. از آنجا که قابلیت شارژ خارج از حالت فقط در پارتیشن /vendor وجود دارد، APIهای رابط فروشنده ضروری نیستند. برای پیاده‌سازی صحیح شارژ خارج از حالت، به charger مراجعه کنید.
  • فیلدهای Type StorageAttribute و فیلدهای مرتبط به دلیل بلااستفاده بودن حذف می‌شوند.
  • chargerDockOnline برای پشتیبانی از شارژ داک به HealthInfo اضافه شد.

پیاده‌سازی

شکل ۴ نمودار UML از کلاس‌های مفید برای پیاده‌سازی HAL AIDL سلامت را نشان می‌دهد:

نمودار UML سلامت AIDL HAL

شکل ۴. نمودار UML سلامت AIDL HAL.

برای اطلاعات بیشتر در مورد پیاده‌سازی سرویس AIDL سلامت، به بخش پیاده‌سازی HAL AIDL سلامت مراجعه کنید.

بهبودی

اندروید ۱۳ از binder در حالت ریکاوری پشتیبانی می‌کند. نصب سرویس Health AIDL در ریکاوری به آن اجازه می‌دهد تا در حالت ریکاوری اجرا شود.

برای اطلاعات بیشتر در مورد نصب سرویس AIDL سلامت برای بهبودی، به موارد زیر مراجعه کنید:

شارژر

قابلیت شارژ خارج از حالت از /system به /vendor منتقل شده است. برای دستگاه‌هایی که با اندروید ۱۳ عرضه می‌شوند، اگر از شارژ خارج از حالت پشتیبانی کنند، فایل باینری سرویس HAL باید از حالت شارژر پشتیبانی کند. برای انجام این کار، به پیاده‌سازی charger مراجعه کنید.

خواص سیستم شارژر

ویژگی‌های ro.charger.* دیگر توسط فایل باینری charger در /vendor قابل خواندن نیستند. اگر دستگاه شما هر یک از ویژگی‌های سیستم ro.charger.* را دارد، برای charger به ویژگی‌های سیستم مراجعه کنید.