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_REQ
VHAL จะเขียนรหัสนโยบายพลังงานลงในพร็อพเพอร์ตี้นี้POWER_POLICY_GROUP_REQ
VHAL จะเขียนรหัสกลุ่มนโยบายพลังงานลงในพร็อพเพอร์ตี้นี้
โมดูลที่ไม่ใช่ 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