เพื่อให้แน่ใจว่าส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ (เช่น จอแสดงผล เสียง และการโต้ตอบด้วยเสียง) ได้รับการคัดเลือกเปิดและปิดตามความจำเป็น AAOS จึงมี นโยบายด้านพลังงาน ซึ่งประกอบด้วยชุดสถานะการเปิดและปิดที่คาดหวังสำหรับส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ . VHAL หรือบริการของผู้จำหน่ายที่มีสิทธิ์ของระบบ สามารถใช้นโยบายพลังงานใหม่ได้เมื่อสถานะพลังงานของ Android มีการเปลี่ยนแปลงหรือเมื่อตรงตามเงื่อนไขที่พวกเขากำลังรอ
อนุญาตให้ใช้นโยบายพลังงานในรัฐรอ VHAL และเปิด ในการเตรียมปิดเครื่อง โหมดโรงรถกำลังทำงานอยู่ และไม่ควรถูกรบกวนจากการเปลี่ยนแปลงสถานะพลังงาน แม้ว่าจะไม่สามารถใช้นโยบายพลังงานปกติได้ แต่นโยบายพลังงาน พิเศษ ซึ่งเป็นนโยบายพลังงานของระบบชื่อ "ไม่มีการโต้ตอบกับผู้ใช้" จะถูกนำมาใช้ในการจัดเตรียมการปิดเครื่อง
สถานะพลังงาน AAOS
อุปกรณ์ AAOS เป็นไปตามแผนภาพสถานะพลังงานนี้:
รูปที่ 1. แผนภาพสถานะพลังงาน AAOS
สถานะพลังงานแต่ละสถานะอธิบายไว้ด้านล่าง:
ค่า | คำอธิบาย |
---|---|
ปิด | ไม่มีการจ่ายไฟให้กับตัวประมวลผลแอปพลิเคชัน (AP) หน่วยความจำ และอุปกรณ์ต่อพ่วงทางกายภาพ |
รอ VHAL ครับ |
|
บน |
|
เตรียมปิดเครื่อง |
|
รอให้ VHAL เสร็จสิ้น |
|
Suspend-to-RAM (STR) | รถยนต์และ AP ปิดอยู่ ไม่มีการดำเนินการโค้ด และพลังงานยังคงอยู่ที่ AP RAM |
สถาปัตยกรรมซอฟต์แวร์
สถาปัตยกรรมนโยบายพลังงานแสดงไว้ด้านล่างและกำหนดไว้ในส่วนต่อไปนี้:
รูปที่ 2 สถาปัตยกรรมนโยบายพลังงาน
นโยบายพลังงานกำหนดไว้อย่างไร?
ผู้ดำเนินการกำหนดนโยบายด้านพลังงานใน /vendor/etc/automotive/power_policy.xml
ซึ่ง:
- กำหนดนโยบายพลังงาน
- กำหนดกลุ่มนโยบายพลังงาน ซึ่งรวมถึงนโยบายพลังงานเริ่มต้น และนำไปใช้โดยอัตโนมัติเมื่อมีการเปลี่ยนสถานะพลังงานเกิดขึ้น
- แทนที่นโยบายพลังงานของระบบ
นโยบายด้านพลังงาน
นโยบายพลังงานคือชุดสถานะพลังงานที่คาดหวังของส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ AAOS รองรับส่วนประกอบต่อไปนี้ในนโยบายพลังงาน:
-
AUDIO
-
MEDIA
-
DISPLAY_MAIN
-
DISPLAY_CLUSTER
-
DISPLAY_FRONT_PASSENGER
-
DISPLAY_REAR_PASSENGER
-
BLUETOOTH
-
WIFI
-
CELLULAR
-
ETHERNET
-
PROJECTION
-
NFC
-
INPUT
-
VOICE_INTERACTION
-
VISUAL_INTERACTION
-
TRUSTED_DEVICE_DETECTION
-
LOCATION
-
MICROPHONE
-
CPU
กลุ่มนโยบายด้านพลังงาน
นโยบายพลังงานเริ่มต้นจะถูกนำไปใช้โดยอัตโนมัติเมื่อมีการระบุการเปลี่ยนสถานะพลังงานในกลุ่มนโยบายพลังงาน ผู้จำหน่ายสามารถกำหนดนโยบายพลังงานเริ่มต้นสำหรับ Wait For VHAL, On และ Wait for VHAL Finish (Deep Sleep Entry หรือ Shutdown Start)
นโยบายพลังงานของระบบ
AAOS รองรับนโยบายพลังงานของระบบเพียงนโยบายเดียวเท่านั้น ซึ่งก็คือ "ไม่มีการโต้ตอบกับผู้ใช้" นโยบายพลังงานของระบบจะถูกนำมาใช้เมื่ออุปกรณ์เข้าสู่โหมดโรงรถ
ลักษณะการทำงานของแต่ละส่วนประกอบในนโยบายพลังงานของระบบแสดงอยู่ในตารางด้านล่าง ผู้ดำเนินการสามารถแทนที่การตรวจจับอุปกรณ์ Bluetooth, NFC และ Trusted ได้ในนโยบายพลังงานของระบบ การแทนที่จะถูกนำไปใช้ใน /vendor/etc/power_policy.xml
ส่วนประกอบ | สถานะพลังงาน | กำหนดค่าได้ |
---|---|---|
เสียง | ปิด | เลขที่ |
สื่อ | ปิด | เลขที่ |
จอแสดงผลหลัก | ปิด | เลขที่ |
คลัสเตอร์การแสดงผล | ปิด | เลขที่ |
แสดงผู้โดยสารด้านหน้า | ปิด | เลขที่ |
จอแสดงผลผู้โดยสารด้านหลัง | ปิด | เลขที่ |
บลูทู ธ | ปิด | ใช่ |
อินเตอร์เน็ตไร้สาย | บน | เลขที่ |
เซลล์ | บน | เลขที่ |
อีเทอร์เน็ต | บน | เลขที่ |
การฉายภาพ | ปิด | เลขที่ |
เอ็นเอฟซี | ปิด | ใช่ |
ป้อนข้อมูล | ปิด | เลขที่ |
การโต้ตอบด้วยเสียง | ปิด | เลขที่ |
ปฏิสัมพันธ์ทางสายตา | ปิด | เลขที่ |
การตรวจจับอุปกรณ์ที่เชื่อถือได้ | บน | ใช่ |
ที่ตั้ง | ปิด | เลขที่ |
ไมโครโฟน | ปิด | เลขที่ |
ซีพียู | บน | เลขที่ |
ปฏิสัมพันธ์กับ VHAL
daemon นโยบายพลังงานรถยนต์ที่ทำงานในเลเยอร์ระบบสมัครสมาชิกสองคุณสมบัติเพื่อฟังคำขอจาก VHAL:
-
POWER_POLICY_REQ
โดย VHAL เขียน ID นโยบายพลังงานไปยังคุณสมบัตินี้ -
POWER_POLICY_GROUP_REQ
VHAL เขียน ID กลุ่มนโยบายพลังงานไปยังคุณสมบัตินี้
นโยบายพลังงานปัจจุบันในระบบสามารถเปลี่ยนแปลงได้โดยโมดูลอื่นที่ไม่ใช่ VHAL ในกรณีดังกล่าว daemon นโยบายพลังงานรถยนต์จะอัปเดตคุณสมบัติ CURRENT_POWER_POLICY
เพื่อแจ้งการเปลี่ยนแปลงใน VHAL
การโต้ตอบกับกระบวนการดั้งเดิม
ตามที่กล่าวไว้ข้างต้น daemon นโยบายพลังงานรถยนต์ทำงานในเลเยอร์ระบบ และในแง่ของการจัดการนโยบายพลังงาน จะให้ฟังก์ชันการทำงานที่เกือบจะเหมือนกับ CPMS ที่ทำงานอยู่ในเลเยอร์เฟรมเวิร์ก นอกจากนี้ สมมติว่า daemon นโยบายกำลังไฟรถยนต์และ CPMS ซิงค์กันโดยสมบูรณ์
daemon นโยบายกำลังรถยนต์จะส่งออกอินเทอร์เฟซ 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. */ 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. */ 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. */ 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. */ void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback); }
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
จัดเตรียมวิธีการเปิดใช้งานการจัดการนโยบายพลังงาน:
- รับนโยบายพลังงานปัจจุบัน
- รับกลุ่มนโยบายพลังงานปัจจุบัน
- ใช้นโยบายพลังงานใหม่
- ตั้งกลุ่มนโยบายพลังงานใหม่
เฉพาะโมดูลที่มีสิทธิพิเศษของระบบเท่านั้นที่สามารถใช้เมธอดนี้ได้ โมดูลที่ต้องการรับแจ้งเมื่อมีการใช้นโยบายพลังงาน สามารถลงทะเบียน Listener การเปลี่ยนแปลงนโยบายพลังงานเป็น CarPowerManager
ได้