AAOS มีนโยบายพลังงานซึ่งประกอบด้วยชุดสถานะเปิดและปิดที่คาดไว้สำหรับคอมโพเนนต์ฮาร์ดแวร์และซอฟต์แวร์ เพื่อให้มั่นใจว่าคอมโพเนนต์ฮาร์ดแวร์และซอฟต์แวร์ (เช่น จอแสดงผล เสียง และการโต้ตอบด้วยเสียง) จะเปิดและปิดตามต้องการ VHAL หรือบริการของผู้ให้บริการที่มีสิทธิ์ระดับระบบจะใช้นโยบายพลังงานใหม่ได้เมื่อสถานะพลังงานของ Android เปลี่ยนแปลงไป หรือเมื่อเป็นไปตามเงื่อนไขที่รออยู่
การใช้นโยบายพลังงานได้รับอนุญาตในสถานะรอ VHAL และเปิด (บางครั้งอาจมีข้อจำกัดบางอย่าง) ใน "เตรียมปิดระบบ" โหมดโรงรถจะทำงานอยู่และไม่ควรได้รับผลกระทบจากการเปลี่ยนแปลงสถานะพลังงาน แม้ว่าจะใช้นโยบายพลังงานปกติไม่ได้ แต่ระบบจะใช้นโยบายพลังงานพิเศษ ซึ่งเป็นนโยบายพลังงานของระบบที่ชื่อว่า "ไม่มีการโต้ตอบของผู้ใช้" ในการเตรียมการปิดเครื่อง
สถานะพลังงานของ AAOS
อุปกรณ์ AAOS เป็นไปตามแผนภาพสถานะพลังงานนี้

รูปที่ 1 แผนภาพสถานะพลังงานของ AAOS
สถานะการจ่ายไฟแต่ละสถานะอธิบายไว้ด้านล่าง
| ค่า | คำอธิบาย |
|---|---|
| ปิด |
|
| รอ VHAL |
|
| เปิด |
|
| การเตรียมการปิดเครื่อง |
|
| รอให้ VHAL เสร็จสิ้น |
|
| ระงับไปยัง RAM (STR) |
|
| ระงับไปยังดิสก์ (STD) |
|
นโยบายพลังงานได้รับการกำหนดไว้ว่าอย่างไร
ผู้ติดตั้งใช้งานจะกำหนดนโยบายการใช้พลังงานใน /vendor/etc/automotive/power_policy.xml ซึ่งมีลักษณะดังนี้
- กำหนดนโยบายการใช้พลังงาน
- กําหนดกลุ่มนโยบายพลังงาน ซึ่งรวมถึงนโยบายพลังงานเริ่มต้นและจะมีผลโดยอัตโนมัติเมื่อสถานะพลังงานมีการเปลี่ยนแปลง
- ลบล้างนโยบายพลังงานของระบบ
นโยบายเกี่ยวกับพลังงาน
นโยบายการใช้พลังงานประกอบด้วยชุดสถานะพลังงานที่คาดไว้ของคอมโพเนนต์ฮาร์ดแวร์และซอฟต์แวร์ AAOS รองรับคอมโพเนนต์ต่อไปนี้ในนโยบายพลังงาน
|
เสียง สื่อ จอแสดงผล บลูทูธ |
WIFI เครือข่ายมือถือ อีเทอร์เน็ต การฉายภาพ |
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 เสร็จสิ้น" (เข้าสู่โหมดสลีปลึกหรือเริ่มปิดเครื่อง)
นโยบายพลังงานของระบบ
AAOS รองรับนโยบายพลังงานของระบบ 2 รายการ ได้แก่ ไม่มีการโต้ตอบกับผู้ใช้ และเตรียมการระงับ ระบบจะใช้นโยบายพลังงานเมื่ออุปกรณ์เข้าสู่โหมดเงียบ โหมดโรงรถ โหมดระงับไปยัง RAM หรือโหมดระงับไปยังดิสก์
ตารางต่อไปนี้แสดงลักษณะการทํางานของคอมโพเนนต์แต่ละรายการในนโยบายพลังงานของระบบ
ผู้ใช้งานสามารถลบล้างการตรวจหาบลูทูธ, NFC และอุปกรณ์ที่เชื่อถือได้ในนโยบายไม่มีการทำงานร่วมกับผู้ใช้เกี่ยวกับพลังงานของระบบ ระบบจะใช้การลบล้างใน
/vendor/etc/power_policy.xml
ไม่มีการโต้ตอบของผู้ใช้
ลักษณะการทํางานของนโยบายพลังงานของระบบที่ไม่มีผู้ใช้โต้ตอบจะระบุไว้ในตารางนี้
| คอมโพเนนต์ | สถานะพลังงาน | กำหนดค่าได้ |
|---|---|---|
| เสียง | ปิด | ไม่ |
| สื่อ | ปิด | ไม่ |
| จอแสดงผล | ปิด | ไม่ |
| บลูทูธ | ปิด | ใช่ |
| Wi-Fi | เปิด | ไม่ |
| เครือข่ายมือถือ | เปิด | ไม่ |
| อีเทอร์เน็ต | เปิด | ไม่ |
| การคาดคะเน | ปิด | ไม่ |
| NFC | ปิด | ใช่ |
| อินพุต | ปิด | ไม่ |
| Assistant | ปิด | ไม่ |
| การโต้ตอบของผู้ใช้ | ปิด | ไม่ |
| การตรวจหาอุปกรณ์ที่เชื่อถือได้สำหรับการเข้าสู่ระบบของผู้ใช้ | เปิด | ใช่ |
| ตำแหน่ง | ปิด | ไม่ |
| ไมโครโฟน | ปิด | ไม่ |
| CPU | เปิด | ไม่ |
ระงับการเตรียม
ลักษณะการทำงานของนโยบายพลังงานของระบบเตรียมการระงับจะกำหนดไว้ในตารางนี้
| คอมโพเนนต์ | สถานะพลังงาน | กำหนดค่าได้สำหรับ OEM |
|---|---|---|
| เสียง | ปิด | ไม่ |
| สื่อ | ไม่มี | ไม่ |
| จอแสดงผล | ไม่มี | ไม่ |
| บลูทูธ | ปิด | ไม่ |
| Wi-Fi | ปิด | ไม่ |
| เครือข่ายมือถือ | ไม่มี | ไม่ |
| อีเทอร์เน็ต | ไม่มี | ไม่ |
| การคาดคะเน | ไม่มี | ไม่ |
| NFC | ไม่มี | ไม่ |
| อินพุต | ไม่มี | ไม่ |
| Assistant | ไม่มี | ไม่ |
| การโต้ตอบของผู้ใช้ | ไม่มี | ไม่ |
| การตรวจหาอุปกรณ์ที่เชื่อถือได้สำหรับการเข้าสู่ระบบของผู้ใช้ | ไม่มี | ไม่ |
| ตำแหน่ง | ปิด | ไม่ |
| ไมโครโฟน | ปิด | ไม่ |
| CPU | ปิด | ไม่ |
การโต้ตอบกับ VHAL
เดรัมนโยบายพลังงานของรถยนต์ที่ทำงานในเลเยอร์ระบบจะสมัครรับข้อมูลพร็อพเพอร์ตี้ 2 รายการเพื่อฟังคำขอจาก VHAL ดังนี้
POWER_POLICY_REQVHAL จะเขียนรหัสนโยบายพลังงานลงในพร็อพเพอร์ตี้นี้POWER_POLICY_GROUP_REQVHAL จะเขียนรหัสกลุ่มนโยบายพลังงานลงในพร็อพเพอร์ตี้นี้
โมดูลที่ไม่ใช่ VHAL สามารถเปลี่ยนนโยบายพลังงานปัจจุบันในระบบได้ ในกรณีนี้ โปรแกรมเดรัมนโยบายพลังงานของรถยนต์จะอัปเดตพร็อพเพอร์ตี้ CURRENT_POWER_POLICY เพื่อแจ้งการเปลี่ยนแปลงไปยัง VHAL
การโต้ตอบกับกระบวนการเนทีฟ
ดังที่กล่าวไว้ข้างต้น เดมอนนโยบายพลังงานของรถยนต์จะทำงานในเลเยอร์ระบบ และในด้านการจัดการนโยบายพลังงานจะมีฟังก์ชันการทำงานเกือบเหมือนกับ CPMS ที่ทำงานในเลเยอร์เฟรมเวิร์ก และสมมติว่าเดรัมนโยบายทางไฟฟ้าสำหรับรถยนต์และ CPMS ซิงค์กันโดยสมบูรณ์
เดรัมนโยบายพลังงานของรถยนต์จะส่งออกอินเทอร์เฟซ 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 มีวิธีการเปิดใช้การจัดการนโยบายพลังงานดังนี้
- ดูนโยบายพลังงานปัจจุบัน
- ใช้นโยบายพลังงานใหม่
- ตั้งค่ากลุ่มนโยบายการใช้พลังงานใหม่
มีเพียงโมดูลที่มีสิทธิ์ระดับระบบเท่านั้นที่จะใช้เมธอดได้ โมดูลที่ต้องการรับการแจ้งเตือนเมื่อใช้นโยบายพลังงานสามารถลงทะเบียนโปรแกรมรับฟังการเปลี่ยนแปลงนโยบายพลังงานเพื่อรับการแจ้งเตือนจาก CarPowerManager