AAOS มีนโยบายด้านพลังงานซึ่งประกอบด้วยชุดสถานะเปิดและปิดที่คาดไว้สำหรับคอมโพเนนต์ฮาร์ดแวร์และซอฟต์แวร์ เพื่อให้มั่นใจว่าคอมโพเนนต์ฮาร์ดแวร์และซอฟต์แวร์ (เช่น จอแสดงผล เสียง และการโต้ตอบด้วยเสียง) จะเปิดและปิดตามความจำเป็น VHAL หรือบริการของผู้ให้บริการที่ได้รับสิทธิ์ระดับระบบสามารถใช้นโยบายด้านพลังงานใหม่เมื่อสถานะพลังงานของ Android เปลี่ยนแปลงหรือเมื่อเป็นไปตามเงื่อนไขที่รออยู่
อนุญาตให้ใช้นโยบายด้านพลังงานในสถานะรอ VHAL, เปิด และเตรียมการก่อนปิดเครื่อง (บางครั้งอาจมีข้อจำกัดบางอย่าง) คุณไม่สามารถกำหนดค่านโยบายพลังงานเริ่มต้นสำหรับ Pre Shutdown Prepare ในกลุ่มนโยบายพลังงานได้ ซึ่งต่างจาก Wait for VHAL และ On ในระยะเตรียมการปิดระบบหลัก โหมดโรงรถจะทำงานอยู่และไม่ควรถูกรบกวนจากการเปลี่ยนแปลงสถานะพลังงาน แม้ว่าจะไม่สามารถใช้นโยบายพลังงานปกติได้ แต่นโยบายพลังงานพิเศษ ซึ่งเป็นนโยบายพลังงานของระบบที่ชื่อว่าไม่มีการโต้ตอบของผู้ใช้ จะถูกนำมาใช้ในเฟสเตรียมการปิดระบบหลัก
สถานะพลังงานของ AAOS
อุปกรณ์ AAOS จะเป็นไปตามแผนภาพสถานะพลังงานต่อไปนี้
รูปที่ 1 แผนภาพสถานะพลังงานของ AAOS
คำอธิบายสถานะพลังงานแต่ละสถานะมีดังนี้
| ค่า | คำอธิบาย |
|---|---|
| ปิด |
|
| รอ VHAL |
|
| เปิด |
|
| เตรียมปิดเครื่อง |
|
| รอให้ VHAL ดำเนินการเสร็จสิ้น |
|
| Suspend-to-RAM (STR) |
|
| Suspend-to-disk (STD) |
|
นโยบายด้านพลังงานมีการกำหนดอย่างไร
ผู้ติดตั้งใช้งานจะกำหนดนโยบายพลังงานใน /vendor/etc/automotive/power_policy.xml ซึ่งจะทำสิ่งต่อไปนี้
- กำหนดนโยบายด้านพลังงาน
- กำหนดกลุ่มนโยบายพลังงาน ซึ่งรวมถึงนโยบายพลังงานเริ่มต้น และจะนำไปใช้โดยอัตโนมัติเมื่อเกิดการเปลี่ยนสถานะพลังงาน
- ลบล้างนโยบายการใช้พลังงานของระบบ
นโยบายด้านพลังงาน
นโยบายด้านพลังงานประกอบด้วยชุดสถานะพลังงานที่คาดไว้ของคอมโพเนนต์ฮาร์ดแวร์และซอฟต์แวร์ AAOS รองรับคอมโพเนนต์เหล่านี้ในนโยบายด้านพลังงาน
|
เสียง สื่อ จอแสดงผล บลูทูธ |
WIFI CELLULAR ETHERNET PROJECTION |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
นอกจากนี้ ผู้ให้บริการยังกำหนดคอมโพเนนต์พลังงานที่กำหนดเองเพื่อใช้กับนโยบายพลังงานได้ด้วย กำหนดคอมโพเนนต์พลังงานที่กำหนดเองในไฟล์ XML เดียวกันกับนโยบายพลังงาน ดังตัวอย่างต่อไปนี้
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
กลุ่มนโยบายด้านพลังงาน
กลุ่มนโยบายด้านพลังงานจะระบุนโยบายด้านพลังงานเริ่มต้นที่จะใช้โดยอัตโนมัติเมื่อมีการเปลี่ยนสถานะพลังงาน ผู้ให้บริการสามารถกำหนดนโยบายพลังงานเริ่มต้นสำหรับ "รอ VHAL" และ "เปิด" ได้
ระบบจะใช้นโยบายพลังงานเริ่มต้นสำหรับ "รอ VHAL" หรือ "เปิด" ในการเปลี่ยนสถานะแต่ละครั้งเป็นสถานะนั้น รวมถึงเมื่อการปิดระบบถูกยกเลิกและ Android กลับสู่สถานะ "รอ VHAL" หากไม่มีการกำหนดนโยบายพลังงานเริ่มต้นสำหรับสถานะหนึ่งๆ ในกลุ่มนโยบายพลังงานปัจจุบัน Daemon นโยบายพลังงานของรถยนต์จะใช้นโยบายพลังงานในตัว ข้อยกเว้นคือเมื่อระบบอยู่ในโหมดปิดเสียงเรียกเข้า: Daemon นโยบายพลังงานของรถยนต์จะบันทึกนโยบายพลังงานปกติที่ใช้ในปัจจุบันหรือที่ขอเป็นรอดำเนินการ ล็อกการเปลี่ยนแปลงนโยบายพลังงานปกติ และใช้นโยบายพลังงานของระบบไม่มีการโต้ตอบของผู้ใช้ การใช้นโยบายพลังงานจะเปลี่ยนเฉพาะคอมโพเนนต์ที่นโยบายครอบคลุม โดยปล่อยคอมโพเนนต์ที่ไม่ได้แตะต้องไว้ในสถานะปัจจุบัน
นโยบายการใช้พลังงานของระบบ
AAOS รองรับนโยบายพลังงานของระบบ 2 นโยบาย ได้แก่ ไม่มีการโต้ตอบของผู้ใช้และการเตรียมระงับ ระบบจะใช้นโยบายพลังงานของระบบเมื่ออุปกรณ์เข้าสู่โหมดปิดเสียงเรียกเข้า โหมดโรงรถ โหมด Suspend-to-RAM หรือโหมด Suspend-to-disk
ตารางต่อไปนี้แสดงลักษณะการทำงานของแต่ละคอมโพเนนต์ในนโยบายพลังงานของระบบ
ผู้ติดตั้งใช้งานสามารถลบล้างการตรวจจับบลูทูธ, NFC และอุปกรณ์ที่เชื่อถือได้ในนโยบายพลังงานของระบบไม่มีการโต้ตอบจากผู้ใช้ ระบบจะใช้การลบล้างใน /vendor/etc/automotive/power_policy.xml
ไม่มีการโต้ตอบของผู้ใช้
ลักษณะการทำงานของนโยบายพลังงานของระบบไม่มีการโต้ตอบของผู้ใช้จะกำหนดไว้ในตารางนี้
| คอมโพเนนต์ | สถานะพลังงาน | กำหนดค่าได้ |
|---|---|---|
| เสียง | ปิด | ไม่ |
| สื่อ | ปิด | ไม่ |
| Display | ปิด | ไม่ |
| บลูทูธ | ปิด | ใช่ |
| Wi-Fi | เปิด | ไม่ |
| เครือข่ายมือถือ | เปิด | ไม่ |
| อีเทอร์เน็ต | เปิด | ไม่ |
| Projection | ปิด | ไม่ |
| NFC | ปิด | ใช่ |
| อินพุต | ปิด | ไม่ |
| ผู้ช่วย | ปิด | ไม่ |
| การโต้ตอบของผู้ใช้ | ปิด | ไม่ |
| การตรวจหาอุปกรณ์ที่เชื่อถือได้สำหรับการเข้าสู่ระบบของผู้ใช้ | เปิด | ใช่ |
| ตำแหน่ง | ปิด | ไม่ |
| ไมโครโฟน | ปิด | ไม่ |
| CPU | เปิด | ไม่ |
เตรียมระงับ
ลักษณะการทำงานของนโยบายพลังงานของระบบเตรียมระงับจะกำหนดไว้ในตารางนี้
| คอมโพเนนต์ | สถานะพลังงาน | OEM กำหนดค่าได้ |
|---|---|---|
| เสียง | ปิด | ไม่ |
| สื่อ | ไม่มี | ไม่ |
| Display | ไม่มี | ไม่ |
| บลูทูธ | ปิด | ไม่ |
| Wi-Fi | ปิด | ไม่ |
| เครือข่ายมือถือ | ไม่มี | ไม่ |
| อีเทอร์เน็ต | ไม่มี | ไม่ |
| Projection | ไม่มี | ไม่ |
| NFC | ไม่มี | ไม่ |
| อินพุต | ไม่มี | ไม่ |
| ผู้ช่วย | ไม่มี | ไม่ |
| การโต้ตอบของผู้ใช้ | ไม่มี | ไม่ |
| การตรวจหาอุปกรณ์ที่เชื่อถือได้สำหรับการเข้าสู่ระบบของผู้ใช้ | ไม่มี | ไม่ |
| ตำแหน่ง | ปิด | ไม่ |
| ไมโครโฟน | ปิด | ไม่ |
| CPU | ปิด | ไม่ |
การโต้ตอบกับ VHAL
Daemon นโยบายพลังงานของรถยนต์ที่ทำงานในเลเยอร์ระบบจะสมัครรับข้อมูลพร็อพเพอร์ตี้ 2 รายการเพื่อฟังคำขอจาก VHAL ดังนี้
POWER_POLICY_REQVHAL จะเขียนรหัสนโยบายพลังงานลงในพร็อพเพอร์ตี้นี้POWER_POLICY_GROUP_REQVHAL จะเขียนรหัสกลุ่มนโยบายพลังงานลงในพร็อพเพอร์ตี้นี้
โมดูลอื่นๆ นอกเหนือจาก VHAL สามารถเปลี่ยนนโยบายด้านพลังงานปัจจุบันในระบบได้ ในกรณีนี้ Daemon นโยบายพลังงานของรถยนต์จะอัปเดตพร็อพเพอร์ตี้ CURRENT_POWER_POLICY เพื่อแจ้งการเปลี่ยนแปลงไปยัง VHAL
การโต้ตอบกับกระบวนการในตัว
CarPowerManagementService (CPMS) มอบสิทธิ์การจัดการนโยบายพลังงานให้กับ Daemon นโยบายพลังงานของรถยนต์ Daemon เป็นแหล่งข้อมูลที่เชื่อถือได้เพียงแหล่งเดียวสำหรับนโยบายด้านพลังงานในระบบ Daemon นโยบายพลังงานของรถยนต์จะจัดการสถานะนโยบายพลังงานและแจ้งเตือน CPMS, VHAL และไคลเอ็นต์แบบเนทีฟอื่นๆ เกี่ยวกับการเปลี่ยนแปลง
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.
* @throws IllegalStateException if the current policy is not set.
*/
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.
* @throws IllegalArgumentException if the componentId is invalid.
*/
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.
* @throws IllegalArgumentException if the callback is already registered.
* @throws IllegalStateException if the callback is dead.
*/
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.
* @throws IllegalArgumentException if the callback is not registered.
*/
void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback);
/**
* Applies the power policy.
*
* {@code policyId} should be one of power policy IDs defined in
* {@code /vendor/etc/automotive/power_policy.xml} or predefined system power policies.
*
* @param policyId ID of power policy.
* @throws IllegalArgumentException if {@code policyId} is invalid.
*/
void applyPowerPolicy(in @utf8InCpp String policyId);
/**
* Sets the current power policy group.
*
*
{@code policyGroupId} should be one of power policy group IDs defined in
* {@code /vendor/etc/automotive/power_policy.xml}.
*
* @param policyGroupId ID of power policy group.
* @throws IllegalArgumentException if {@code policyGroupId} is invalid.
*/
void setPowerPolicyGroup(in @utf8InCpp String policyGroupId);
}
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 ได้