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

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

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

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

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

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

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

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

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

กลุ่มนโยบายการใช้พลังงาน

กลุ่มนโยบายการใช้พลังงานจะระบุนโยบายการใช้พลังงานเริ่มต้นที่จะใช้โดยอัตโนมัติเมื่อมีการเปลี่ยนสถานะพลังงาน ผู้ให้บริการสามารถกำหนดนโยบายการเปิด/ปิดเริ่มต้นสำหรับ Wait for VHAL และ On ได้

นโยบายการใช้พลังงานของระบบ

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

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

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

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

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

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

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

คอมโพเนนต์ สถานะพลังงาน กำหนดค่าได้โดย 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