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

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

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

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

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

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

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

สถานะการจ่ายไฟแต่ละสถานะอธิบายไว้ด้านล่าง

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

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

ผู้ติดตั้งใช้งานจะกำหนดนโยบายการใช้พลังงานใน /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