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

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

อนุญาตให้ใช้นโยบายการจ่ายไฟในสถานะ Wait for VHAL และ On (บางครั้งอาจมีข้อจำกัดบางอย่าง) ใน Shutdown Prepare, Garage Mode is running and should not be disturbed by a power state change. แม้ว่าจะใช้นโยบายการเปิด/ปิดเครื่องปกติไม่ได้ แต่ระบบจะใช้นโยบายการเปิด/ปิดเครื่องพิเศษซึ่งเป็นนโยบายการเปิด/ปิดเครื่องของระบบที่ชื่อว่า "ไม่มีการโต้ตอบจากผู้ใช้" ใน Shutdown Prepare

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

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

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

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

สถานะเปิด/ปิดแต่ละสถานะอธิบายไว้ด้านล่าง

ค่า คำอธิบาย
ปิด
  • ไม่มีการจ่ายไฟให้กับ Application Processor (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 ทราบว่าสามารถปิดได้ หน่วยควบคุมขนาดเล็กของยานพาหนะ (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 และ Wait for VHAL Finish (Deep Sleep Entry หรือ Shutdown Start)

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

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

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