Android 9 มี android.hardware.health
HAL 2.0 ซึ่งเป็นเวอร์ชันหลักที่อัปเกรดจาก health@1.0 HAL HAL ใหม่นี้มีข้อดีดังต่อไปนี้:
- การแยกระหว่างกรอบงานและรหัสผู้ขายชัดเจนขึ้น
- เลิกใช้
healthd
daemon ที่ไม่จำเป็น - ระดับอิสระที่มากขึ้นสำหรับการปรับแต่งผู้จำหน่ายในรายงานข้อมูลสุขภาพ
- ข้อมูลความสมบูรณ์ของอุปกรณ์มากกว่าแค่แบตเตอรี่
Android 11 มี android.hardware.health
HAL 2.1 ซึ่งเป็นรุ่นรองที่อัปเกรดจาก health@2.0 HAL HAL ใหม่นี้มีข้อดีดังต่อไปนี้:
- ง่ายต่อการดำเนินการ
- สอดคล้องกับ 2.0 HAL API ที่มีอยู่ได้ดีขึ้น
- การแยกเสียงแหลมที่ดีขึ้นในรหัสการชาร์จนอกโหมด
- รองรับกรอบการทำงานที่ดีขึ้นเพื่อบ่งบอกถึงความสมบูรณ์ของแบตเตอรี่ของอุปกรณ์
ความต้องการ
อุปกรณ์ที่เปิดตัวด้วย Android 9 ต้องมี 2.0 HAL (และต้องไม่มี 1.0 HAL) อุปกรณ์ที่ไม่ได้เปิดตัวพร้อมกับ Android 9 แต่วางแผนที่จะอัปเดตอิมเมจผู้ขายเป็น Target Framework Compatibility Matrix เวอร์ชัน 3 (เผยแพร่ใน Android 9) จะต้องลบการใช้งาน 1.0 HAL ที่มีอยู่และจัดเตรียม 2.0 HAL
อุปกรณ์ที่เปิดตัวด้วย Android 11 ต้องมี 2.1 HAL (และต้องไม่มี 1.0 หรือ 2.0 HAL) อุปกรณ์ที่ไม่ได้เปิดตัวพร้อมกับ Android 11 แต่วางแผนที่จะอัปเดตอิมเมจผู้ขายเป็น Target Framework Compatibility Matrix เวอร์ชัน 5 (เผยแพร่ใน Android 11) จะต้องลบการใช้งาน 2.0 HAL ที่มีอยู่และจัดเตรียม 2.1 HAL ขอแนะนำให้ใช้อุปกรณ์ที่ไม่ได้เปิดตัวพร้อมกับ Android 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 ที่เผยแพร่ใน Android 11 - เครื่องชาร์จ : เรียกใช้งานได้ในการชาร์จนอกโหมดที่แสดงแอนิเมชั่นการชาร์จโทรศัพท์
- การกู้คืน : เรียกใช้งานได้ในโหมดการกู้คืนที่ต้องดึงข้อมูลแบตเตอรี่
- healthd : Legacy daemon ที่ทำงานใน Android ที่ดึงข้อมูลที่เกี่ยวข้องกับสุขภาพและมอบให้กับเฟรมเวิร์ก
- storaged : daemon ที่ทำงานใน Android ที่ดึงข้อมูลการจัดเก็บและจัดเตรียมให้กับเฟรมเวิร์ก
สุขภาพใน Android 8.x
ใน Android 8.x องค์ประกอบสุขภาพทำงานตามรายละเอียดในไดอะแกรมต่อไปนี้:
รูปที่ 1 . สุขภาพใน Android 8.x
ในแผนภาพนี้:
- กรอบงานใช้การเรียก Binder หนึ่ง (1) ครั้งและการเรียก hwbinder หนึ่ง (1) ครั้งเพื่อสื่อสารกับฮาร์ดแวร์
-
healthd
ลิงก์แบบคงที่ไปยังlibhealthd_android
,libbatterymonitor
และlibbatteryservice
- health@1.0-impl ลิงก์ไปยัง
libhealthd. BOARD
แบบคงที่libhealthd. BOARD
แต่ละบอร์ดสามารถปรับแต่ง libhealthd. BOARD
ที่แตกต่างกันได้ libhealthd. BOARD
; จะถูกกำหนดเมื่อสร้างอุปกรณ์ชาร์จ, health@1.0-impl และลิงก์การกู้คืน
สำหรับโหมดอื่นๆ:
รูปที่ 2 สุขภาพใน Android 8.x การชาร์จและโหมดการกู้คืนนอกโหมด
- เครื่องชาร์จเชื่อมโยงกับ
libhealthd. BOARD
แบบคงที่libhealthd. BOARD
,libhealthd_charger
และlibbatterymonitor
- การกู้คืนลิงก์ไปยัง
libhealthd. BOARD
แบบคงที่libhealthd. BOARD
และlibbatterymonitor
สุขภาพใน Android 9
ใน Android 9 องค์ประกอบสุขภาพทำงานตามรายละเอียดในไดอะแกรมต่อไปนี้:
รูปที่ 3 . สุขภาพใน Android 9
เฟรมเวิร์กพยายามดึงบริการ health@2.0 จาก hwservicemanager
หากล้มเหลว จะเรียกไปที่ health@1.0 (ใน Android 8.x) เส้นทางรหัสเดิมจะถูกเก็บไว้เพื่อให้อิมเมจระบบ Android 9 เข้ากันได้กับอิมเมจผู้ขาย Android 8.x เฟรมเวิร์กไม่ดึงข้อมูลจาก HAL ทั้งสอง เนื่องจากอุปกรณ์สามารถมีเวอร์ชันบริการเดียวเท่านั้น (1.0 หรือ 2.0)
สำหรับโหมดอื่นๆ:
รูปที่ 4 สุขภาพใน Android 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) ] |
+-------------------------------------+
หากไม่มีการใช้งาน Health 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 จัดเตรียมฟังก์ชันการทำงานเดียวกันกับเฟรมเวิร์กเป็น healthd daemon แบบเก่า นอกจากนี้ยังจัดเตรียม API ที่คล้ายกับบริการที่จัดเตรียมไว้ก่อนหน้านี้ (เช่น IBatteryPropertiesRegistrar )
อินเทอร์เฟซหลัก IHealth มีฟังก์ชันดังต่อไปนี้:
-
registerCallback
เพื่อแทนที่IBatteryPropertiesRegistrar.registerListener
-
unregisterCallback
เพื่อแทนที่IBatteryPropertiesRegistrar.unregisterListener
-
update
เพื่อแทนที่IBatteryPropertiesRegistrar.scheduleUpdate
-
IBatteryPropertiesRegistrar.getProperties
จะถูกแทนที่ด้วยสิ่งต่อไปนี้:-
getChargeCounter
-
getCurrentNow
-
getCurrentAverage
-
getCapacity
-
getEnergyCounter
-
getChargeStatus
-
getHealthInfo
-
นอกจากนี้ IHealth
ยังมี API ใหม่ต่อไปนี้สำหรับการ storaged
เพื่อดึงข้อมูลที่เกี่ยวข้องกับการจัดเก็บเฉพาะผู้จำหน่าย:
-
getStorageInfo
-
getDiskStats
โครงสร้างใหม่ @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
ที่สืบทอดมา
โครงสร้างใหม่ @2.1::HealthInfo
จะถูกส่งคืนผ่านการเรียกกลับและ getHealthInfo_2_1
โครงสร้างนี้มีข้อมูลความสมบูรณ์ของอุปกรณ์เพิ่มเติมผ่าน health@2.0 HAL ซึ่งรวมถึง:
- ระดับความจุของแบตเตอรี่
- เวลาในการชาร์จแบตเตอรี่จนเต็มในขณะนี้ (เป็นวินาที)
- ความจุของการออกแบบแบตเตอรี่ที่ชาร์จจนเต็ม (เป็น μAh)
สำหรับข้อมูลเกี่ยวกับการใช้บริการ Health โปรดดูที่ Implementing Health