เพื่อให้แน่ใจว่าส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ (เช่น การแสดงผล เสียง และการโต้ตอบด้วยเสียง) ได้รับการเปิดและปิดอย่างเลือกสรรตามความจำเป็น AAOS จึงมี นโยบายด้านพลังงาน ซึ่งประกอบด้วยชุดของสถานะการเปิดและปิดที่คาดไว้สำหรับส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ . VHAL หรือบริการของผู้จำหน่ายที่มีสิทธิ์ของระบบ สามารถใช้นโยบายพลังงานใหม่เมื่อสถานะพลังงานของ Android เปลี่ยนไปหรือเมื่อตรงตามเงื่อนไขที่กำลังรอ
อนุญาตให้ใช้นโยบายพลังงานในสถานะ Wait for VHAL และ On ในการเตรียมการปิดระบบ โหมดโรงรถกำลังทำงานและไม่ควรถูกรบกวนจากการเปลี่ยนแปลงสถานะพลังงาน แม้ว่าจะไม่สามารถใช้นโยบายด้านพลังงานแบบปกติได้ แต่นโยบายด้านพลังงาน พิเศษ ซึ่งเป็นนโยบายด้านพลังงานของระบบที่ชื่อว่า "ไม่มีการโต้ตอบกับผู้ใช้" จะถูกนำไปใช้ในการจัดเตรียมการปิดระบบ
สถานะพลังงาน AAOS
อุปกรณ์ AAOS ทำตามไดอะแกรมสถานะพลังงานนี้:
รูปที่ 1 ไดอะแกรมสถานะพลังงาน AAOS
สถานะพลังงานแต่ละสถานะได้อธิบายไว้ด้านล่าง:
ค่า | คำอธิบาย |
---|---|
ปิด | ไม่มีการจ่ายไฟให้กับตัวประมวลผลแอปพลิเคชัน (AP) หน่วยความจำ และอุปกรณ์ต่อพ่วง |
รอVHAL |
|
บน |
|
เตรียมปิดเครื่อง |
|
รอให้ VHAL เสร็จสิ้น |
|
ระงับไปยังแรม (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
ส่วนประกอบ | สถานะพลังงาน | กำหนดค่าได้ |
---|---|---|
เครื่องเสียง | ปิด | ไม่ |
สื่อ | ปิด | ไม่ |
จอแสดงผลหลัก | ปิด | ไม่ |
คลัสเตอร์ดิสเพลย์ | ปิด | ไม่ |
จอแสดงผลผู้โดยสารด้านหน้า | ปิด | ไม่ |
จอแสดงผลผู้โดยสารด้านหลัง | ปิด | ไม่ |
บลูทู ธ | ปิด | ใช่ |
Wi-Fi | บน | ไม่ |
เซลลูล่าร์ | บน | ไม่ |
อีเธอร์เน็ต | บน | ไม่ |
การฉายภาพ | ปิด | ไม่ |
NFC | ปิด | ใช่ |
ป้อนข้อมูล | ปิด | ไม่ |
การโต้ตอบด้วยเสียง | ปิด | ไม่ |
ปฏิสัมพันธ์ทางสายตา | ปิด | ไม่ |
การตรวจจับอุปกรณ์ที่เชื่อถือได้ | บน | ใช่ |
ที่ตั้ง | ปิด | ไม่ |
ไมโครโฟน | ปิด | ไม่ |
ซีพียู | บน | ไม่ |
ปฏิสัมพันธ์กับVHAL
daemon นโยบายพลังงานรถยนต์ที่ทำงานในเลเยอร์ระบบสมัครสองคุณสมบัติเพื่อรับฟังคำขอจาก VHAL:
-
POWER_POLICY_REQ
, VHAL เขียน ID นโยบายพลังงานไปยังคุณสมบัตินี้ -
POWER_POLICY_GROUP_REQ
, VHAL เขียน ID กลุ่มนโยบายพลังงานลงในคุณสมบัตินี้
นโยบายพลังงานปัจจุบันในระบบสามารถเปลี่ยนแปลงได้โดยโมดูลอื่นที่ไม่ใช่ VHAL ในกรณีนั้น daemon นโยบายพลังงานรถยนต์จะอัพเดตคุณสมบัติ CURRENT_POWER_POLICY
เพื่อแจ้งการเปลี่ยนแปลงไปยัง VHAL
การโต้ตอบกับกระบวนการดั้งเดิม
ดังที่กล่าวไว้ข้างต้น daemon นโยบายพลังงานของรถยนต์ทำงานในเลเยอร์ระบบ และในแง่ของการจัดการนโยบายพลังงาน ให้ฟังก์ชันที่เกือบจะเหมือนกับ CPMS ที่ทำงานในเลเยอร์เฟรมเวิร์ก นอกจากนี้ สมมติว่าดีมอนนโยบายพลังงานรถยนต์และ 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
มีวิธีการเปิดใช้งานการจัดการนโยบายพลังงาน:
- รับนโยบายพลังงานปัจจุบัน
- รับกลุ่มนโยบายพลังงานปัจจุบัน
- ใช้นโยบายพลังงานใหม่
- ตั้งกลุ่มนโยบายพลังงานใหม่
เฉพาะโมดูลที่มีสิทธิ์ของระบบเท่านั้นที่สามารถใช้เมธอดนี้ได้ โมดูลที่ต้องการแจ้งเมื่อมีการนำนโยบายพลังงานไปใช้ สามารถลงทะเบียนฟังการเปลี่ยนแปลงนโยบายพลังงานไปที่ CarPowerManager