นโยบายเกี่ยวกับพลังงาน

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

อนุญาตให้ใช้นโยบายด้านพลังงานในสถานะรอ VHAL, เปิด และเตรียมการก่อนปิดเครื่อง (บางครั้งอาจมีข้อจำกัดบางอย่าง) คุณไม่สามารถกำหนดค่านโยบายพลังงานเริ่มต้นสำหรับ Pre Shutdown Prepare ในกลุ่มนโยบายพลังงานได้ ซึ่งต่างจาก Wait for VHAL และ On ในระยะเตรียมการปิดระบบหลัก โหมดโรงรถจะทำงานอยู่และไม่ควรถูกรบกวนจากการเปลี่ยนแปลงสถานะพลังงาน แม้ว่าจะไม่สามารถใช้นโยบายพลังงานปกติได้ แต่นโยบายพลังงานพิเศษ ซึ่งเป็นนโยบายพลังงานของระบบที่ชื่อว่าไม่มีการโต้ตอบของผู้ใช้ จะถูกนำมาใช้ในเฟสเตรียมการปิดระบบหลัก

สถานะพลังงานของ AAOS

อุปกรณ์ AAOS จะเป็นไปตามแผนภาพสถานะพลังงานต่อไปนี้

แผนภาพสถานะพลังงานของ AAOS

รูปที่ 1 แผนภาพสถานะพลังงานของ AAOS

คำอธิบายสถานะพลังงานแต่ละสถานะมีดังนี้

ค่า คำอธิบาย
ปิด
  • ไม่มีการจ่ายไฟไปยังผู้ประมวลผลข้อมูลแอปพลิเคชัน (AP), หน่วยความจำ และอุปกรณ์ต่อพ่วง
รอ VHAL
  • เมื่อคนขับโต้ตอบกับรถ (เช่น โดยการเปิดประตู) VMCU จะจ่ายไฟให้กับ AP, หน่วยความจำ และอุปกรณ์ต่อพ่วง
  • AAOS จะเปลี่ยนจากสถานะใดสถานะหนึ่งใน 3 สถานะ (ปิด, ระงับเป็น RAM (STR, รอให้ VHAL เสร็จสิ้น)) จากนั้นเข้าสู่สถานะรอ VHAL ซึ่งจะรอการประสานงานกับ VHAL
เปิด
  • VHAL จะสั่งให้ AAOS เข้าสู่สถานะเปิด ในสถานะนี้ AAOS จะทำงานอย่างเต็มรูปแบบและโต้ตอบกับคนขับ
  • จอแสดงผลจะควบคุมโดยนโยบายพลังงาน ไม่ใช่การเรียกใช้การเปิด/ปิดจอแสดงผลของ Android สำหรับรูปแบบของอุปกรณ์อื่นๆ
เตรียมปิดเครื่อง
  • เมื่อคนขับหยุดขับรถ VHAL จะสั่งให้ AAOS เข้าสู่การเตรียมปิดเครื่อง ซึ่งจะเริ่มด้วยระยะเตรียมการก่อนปิดเครื่อง ตามด้วยระยะเตรียมการปิดเครื่องหลัก ในระยะหลัก จอแสดงผลและเสียงจะปิดอยู่ และ AAOS จะไม่โต้ตอบกับคนขับ ระบบ Android ยังคงทำงานอยู่และสามารถอัปเดตแอปและระบบ Android ได้ เมื่อการอัปเดตเสร็จสมบูรณ์ ระบบ Android จะเข้าสู่สถานะรอให้ VHAL เสร็จสิ้น
รอให้ VHAL ดำเนินการเสร็จสิ้น
  • AAOS จะแจ้ง VHAL ว่าสามารถปิดระบบได้ Vehicle Microcontroller Unit (VMCU) ควรจะทำให้ระบบวงจรรวมบนชิป (SoC) เข้าสู่โหมดสลีปแบบลึกและตัดไฟจาก AP จากนั้น AAOS จะอยู่ในสถานะ STR แม้ว่าจะไม่มีการเรียกใช้โค้ดก็ตาม
  • หาก VHAL ยังไม่เสร็จสิ้นและคนขับกลับมา เครื่องเล่นวิทยุ (HU) ควรเปลี่ยนไปเป็น "รอ VHAL" โดยตรง
Suspend-to-RAM (STR)
  • รถยนต์และ AP ปิดอยู่ ไม่มีการเรียกใช้โค้ด และระบบจะรักษาพลังงานไว้ที่ RAM ของ AP
Suspend-to-disk (STD)
  • รถยนต์และ AP ปิดอยู่ ไม่มีการเรียกใช้โค้ด และไม่มีการจ่ายไฟไปยังหน่วยประมวลผลและ RAM ของ AP

นโยบายด้านพลังงานมีการกำหนดอย่างไร

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

โมดูลอื่นๆ นอกเหนือจาก 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 ได้