AAOS มีนโยบายการใช้พลังงานซึ่งประกอบด้วยชุดสถานะเปิดและปิดที่คาดไว้สำหรับคอมโพเนนต์ฮาร์ดแวร์และซอฟต์แวร์ เพื่อให้มั่นใจว่าคอมโพเนนต์ฮาร์ดแวร์และซอฟต์แวร์ (เช่น การแสดงผล เสียง และการโต้ตอบด้วยเสียง) จะเปิดและปิดตามความจำเป็น VHAL หรือบริการของผู้ให้บริการที่มีสิทธิ์ระดับระบบจะใช้นโยบายการใช้พลังงานใหม่ได้เมื่อสถานะการใช้พลังงานของ Android เปลี่ยนแปลง หรือเมื่อตรงตามเงื่อนไขที่บริการรออยู่
อนุญาตให้ใช้นโยบายการจ่ายไฟในสถานะ Wait for VHAL และ On (บางครั้งอาจมีข้อจำกัดบางอย่าง) ใน Shutdown Prepare, Garage Mode is running and should not be disturbed by a power state change. แม้ว่าจะใช้นโยบายการเปิด/ปิดเครื่องปกติไม่ได้ แต่ระบบจะใช้นโยบายการเปิด/ปิดเครื่องพิเศษซึ่งเป็นนโยบายการเปิด/ปิดเครื่องของระบบที่ชื่อว่า "ไม่มีการโต้ตอบจากผู้ใช้" ใน Shutdown Prepare
สถานะพลังงานของ AAOS
อุปกรณ์ AAOS จะเป็นไปตามแผนภาพสถานะพลังงานนี้

รูปที่ 1 แผนภาพสถานะพลังงานของ AAOS
สถานะเปิด/ปิดแต่ละสถานะอธิบายไว้ด้านล่าง
| ค่า | คำอธิบาย |
|---|---|
| ปิด |
|
| รอ VHAL |
|
| เปิด |
|
| เตรียมการปิด |
|
| รอให้ VHAL เสร็จสิ้น |
|
| Suspend-to-RAM (STR) |
|
| พักไปยังดิสก์ (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>
กลุ่มนโยบายด้านพลังงาน
กลุ่มนโยบายด้านพลังงานจะระบุนโยบายด้านพลังงานเริ่มต้นที่จะใช้โดยอัตโนมัติเมื่อมีการเปลี่ยนสถานะพลังงาน ผู้ให้บริการสามารถกำหนดนโยบายการเปิด/ปิดเริ่มต้นสำหรับ Wait For VHAL, On และ Wait for VHAL Finish (Deep Sleep Entry หรือ Shutdown Start)
นโยบายการใช้พลังงานของระบบ
AAOS รองรับนโยบายการเปิด/ปิดระบบ 2 แบบ ได้แก่ ไม่มีการโต้ตอบของผู้ใช้และ การเตรียมการระงับ ระบบจะใช้นโยบายการจ่ายไฟของระบบเมื่ออุปกรณ์เข้าสู่ โหมดเงียบ โหมดโรงรถ ระงับไปยัง RAM หรือระงับไปยังดิสก์
ตารางต่อไปนี้แสดงลักษณะการทำงานของคอมโพเนนต์แต่ละรายการในนโยบายการใช้พลังงานของระบบ
ผู้ติดตั้งใช้งานสามารถลบล้างการตรวจหาบลูทูธ, NFC และอุปกรณ์ที่เชื่อถือได้ในนโยบายการเปิด/ปิดระบบไม่ต้องมีการโต้ตอบจากผู้ใช้ การลบล้างจะใช้ใน
/vendor/etc/power_policy.xml
ไม่มีการโต้ตอบของผู้ใช้
ลักษณะการทำงานของนโยบายการใช้พลังงานของระบบไม่มีการโต้ตอบของผู้ใช้มีการกำหนดไว้ในตารางนี้
| คอมโพเนนต์ | สถานะพลังงาน | กำหนดค่าได้ |
|---|---|---|
| เสียง | ปิด | ไม่ |
| สื่อ | ปิด | ไม่ |
| Display | ปิด | ไม่ |
| บลูทูธ | ปิด | ใช่ |
| Wi-Fi | เปิด | ไม่ |
| เครือข่ายมือถือ | เปิด | ไม่ |
| อีเทอร์เน็ต | เปิด | ไม่ |
| Projection | ปิด | ไม่ |
| NFC | ปิด | ใช่ |
| อินพุต | ปิด | ไม่ |
| ผู้ช่วย | ปิด | ไม่ |
| การโต้ตอบของผู้ใช้ | ปิด | ไม่ |
| การตรวจหาอุปกรณ์ที่เชื่อถือได้สำหรับการเข้าสู่ระบบของผู้ใช้ | เปิด | ใช่ |
| ตำแหน่ง | ปิด | ไม่ |
| ไมโครโฟน | ปิด | ไม่ |
| CPU | เปิด | ไม่ |
เตรียมการระงับ
ลักษณะการทำงานของนโยบายการใช้พลังงานของระบบ suspend prep มีคำจำกัดความในตารางนี้
| คอมโพเนนต์ | สถานะพลังงาน | กำหนดค่าได้โดย 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