นโยบายพลังงาน

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

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

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

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

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

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

โปรดดูคำอธิบายสถานะกำลังไฟฟ้าแต่ละแบบด้านล่างนี้

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

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

ผู้ติดตั้งใช้งานกำหนดนโยบายด้านกำลังไฟฟ้าใน/vendor/etc/automotive/power_policy.xml ซึ่ง:

  • กำหนดนโยบายไฟฟ้า
  • กำหนดกลุ่มนโยบายพลังงาน ซึ่งประกอบด้วยนโยบายกำลังไฟฟ้าเริ่มต้นและ ใช้เมื่อมีการเปลี่ยนสถานะพลังงาน
  • ลบล้างนโยบายพลังงานของระบบ

นโยบายพลังงาน

นโยบายพลังงานประกอบด้วยชุดสถานะพลังงานที่คาดหวังของส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ AAOS รองรับคอมโพเนนต์เหล่านี้ในนโยบายพลังงาน

เสียง
สื่อ
ดิสเพลย์
บลูทูธ
Wi-Fi
เครือข่ายมือถือ
อีเทอร์เน็ต
การคาดการณ์
NFC
อินพุต
การโต้ตอบด้วยเสียง
การโต้ตอบด้วยภาพ
TRUSTED_DEVICE_DETECTION
สถานที่ตั้ง
ไมโครโฟน
CPU

นอกจากนี้ ผู้ให้บริการยังสามารถกำหนดองค์ประกอบพลังงานที่กำหนดเองของตนเพื่อใช้กับนโยบายการใช้พลังงานได้อีกด้วย นิยาม คอมโพเนนต์พลังงานที่กำหนดเองในไฟล์ XML เดียวกับนโยบายพลังงาน ดังในตัวอย่างนี้

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

กลุ่มนโยบายพลังงาน

ระบบจะใช้นโยบายพลังงานเริ่มต้นโดยอัตโนมัติเมื่อเปลี่ยนสถานะพลังงานคือ ที่ระบุในกลุ่มนโยบายพลังงาน ผู้ให้บริการสามารถกําหนดนโยบายพลังงานเริ่มต้นสําหรับ รอ VHAL, เปิด และรอจน VHAL เสร็จสิ้น (Deep Entry หรือ Shutdown Start)

นโยบายพลังงานของระบบ

AAOS รองรับนโยบายพลังงานของระบบ 2 นโยบาย ซึ่งไม่มีการโต้ตอบของผู้ใช้ และ ระงับการเตรียมการ ระบบจะใช้นโยบายพลังงานของระบบเมื่ออุปกรณ์เข้าสู่ โหมดปิดเสียง, โหมดโรงรถ, ระงับไปยัง RAM หรือระงับไปยังดิสก์

ตารางต่อไปนี้แสดงลักษณะการทำงานของแต่ละคอมโพเนนต์ในนโยบายพลังงานของระบบ ผู้ปฏิบัติงานสามารถลบล้างการตรวจจับบลูทูธ, NFC และอุปกรณ์ที่เชื่อถือได้ใน นโยบายพลังงานของระบบที่ไม่มีการโต้ตอบกับผู้ใช้ ระบบจะใช้การลบล้างใน /vendor/etc/power_policy.xml

ไม่มีการโต้ตอบของผู้ใช้

ลักษณะการทำงานของนโยบายพลังงานของระบบไม่มีการโต้ตอบของผู้ใช้ได้รับการกำหนดไว้ใน ตาราง:

คอมโพเนนต์ สถานะพลังงาน กำหนดค่าได้
เสียง ปิด ไม่
สื่อ ปิด ไม่
จอแสดงผล ปิด ไม่
บลูทูธ ปิด ใช่
Wi-Fi เปิด ไม่
เครือข่ายมือถือ เปิด ไม่
อีเทอร์เน็ต เปิด ไม่
การคาดคะเน ปิด ไม่
NFC ปิด ใช่
อินพุต ปิด ไม่
Assistant ปิด ไม่
การโต้ตอบของผู้ใช้ ปิด ไม่
การตรวจหาอุปกรณ์ที่เชื่อถือสำหรับการเข้าสู่ระบบของผู้ใช้ เปิด ใช่
ตำแหน่ง ปิด ไม่
ไมโครโฟน ปิด ไม่
CPU เปิด ไม่

การระงับการเตรียมพร้อม

ลักษณะการทำงานของนโยบายกำลังของระบบการเตรียมระงับมีคำจำกัดความในตารางนี้

ส่วนประกอบ สถานะพลังงาน กำหนดค่าจาก OEM ได้
เสียง ปิด ไม่
สื่อ ไม่มี ไม่
จอแสดงผล ไม่มี ไม่
บลูทูธ ปิด ไม่
Wi-Fi ปิด ไม่
เครือข่ายมือถือ ไม่มี ไม่
อีเทอร์เน็ต ไม่มี ไม่
การคาดคะเน ไม่มี ไม่
NFC ไม่มี ไม่
อินพุต ไม่มี ไม่
Assistant ไม่มี ไม่
การโต้ตอบของผู้ใช้ ไม่มี ไม่
การตรวจหาอุปกรณ์ที่เชื่อถือสำหรับการเข้าสู่ระบบของผู้ใช้ ไม่มี ไม่
ตำแหน่ง ปิด ไม่
ไมโครโฟน ปิด ไม่
CPU ปิด ไม่

การโต้ตอบกับ VHAL

Daemon ของนโยบายพลังงานในรถยนต์ที่ทำงานอยู่ในเลเยอร์ระบบสมัครใช้บริการพร็อพเพอร์ตี้ 2 รายการเพื่อฟัง คำขอจาก VHAL:

  • POWER_POLICY_REQ VHAL จะเขียนรหัสนโยบายพลังงานไปยังพร็อพเพอร์ตี้นี้
  • POWER_POLICY_GROUP_REQ VHAL เขียนรหัสกลุ่มนโยบายพลังงาน มาที่พร็อพเพอร์ตี้นี้

นโยบายกำลังไฟฟ้าปัจจุบันในระบบสามารถเปลี่ยนได้โดยโมดูลนอกเหนือจาก VHAL ในกรณีดังกล่าว Daemon ของนโยบายพลังงานในรถยนต์จะอัปเดตพร็อพเพอร์ตี้ CURRENT_POWER_POLICY เพื่อแจ้ง เปลี่ยนเป็น VHAL

การโต้ตอบกับกระบวนการดั้งเดิม

ดังที่กล่าวไว้ข้างต้น Daemon ของนโยบายพลังงานของรถยนต์จะทำงานในเลเยอร์ของระบบและในแง่ของกำลังไฟฟ้า การจัดการนโยบายมีฟังก์ชันการทำงานแทบจะเหมือนกับ CPMS ที่ทำงานในเลเยอร์ของเฟรมเวิร์ก และสมมติว่า Daemon ของนโยบายพลังงานของรถยนต์และ CPMS ซิงค์กันเรียบร้อยแล้ว

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