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

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

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

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

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

ไดอะแกรมสถานะพลังงาน AAOS

รูปที่ 1 ไดอะแกรมสถานะพลังงาน AAOS

สถานะพลังงานแต่ละสถานะได้อธิบายไว้ด้านล่าง:

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

สถาปัตยกรรมซอฟต์แวร์

สถาปัตยกรรมนโยบายพลังงานแสดงไว้ด้านล่างและกำหนดไว้ในส่วนต่อไปนี้:

รูปที่ 2. สถาปัตยกรรมนโยบายพลังงาน

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

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

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

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

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

  • AUDIO
  • MEDIA
  • DISPLAY_MAIN
  • DISPLAY_CLUSTER
  • DISPLAY_FRONT_PASSENGER
  • DISPLAY_REAR_PASSENGER
  • BLUETOOTH
  • WIFI
  • CELLULAR
  • ETHERNET
  • PROJECTION
  • NFC
  • INPUT
  • VOICE_INTERACTION
  • VISUAL_INTERACTION
  • TRUSTED_DEVICE_DETECTION
  • LOCATION
  • MICROPHONE
  • CPU

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

นโยบายพลังงานเริ่มต้นจะถูกนำไปใช้โดยอัตโนมัติเมื่อมีการระบุการเปลี่ยนสถานะพลังงานในกลุ่มนโยบายพลังงาน ผู้จำหน่ายสามารถกำหนดนโยบายพลังงานเริ่มต้นสำหรับ Wait For VHAL, On และ Wait for VHAL Finish (Deep Sleep Entry หรือ Shutdown Start)

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

AAOS รองรับนโยบายพลังงานระบบเดียวเท่านั้น ซึ่งก็คือ "ไม่มีการโต้ตอบกับผู้ใช้" นโยบายพลังงานของระบบจะมีผลเมื่ออุปกรณ์เข้าสู่โหมดเงียบหรือโหมดโรงรถ

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

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

ปฏิสัมพันธ์กับVHAL

daemon นโยบายพลังงานรถยนต์ที่ทำงานในเลเยอร์ระบบสมัครสองคุณสมบัติเพื่อรับฟังคำขอจาก VHAL:

  • POWER_POLICY_REQ , VHAL เขียน ID นโยบายพลังงานไปยังคุณสมบัตินี้
  • POWER_POLICY_GROUP_REQ , VHAL เขียน ID กลุ่มนโยบายพลังงานลงในคุณสมบัตินี้

นโยบายพลังงานปัจจุบันในระบบสามารถเปลี่ยนแปลงได้โดยโมดูลอื่นที่ไม่ใช่ VHAL ในกรณีนั้น daemon นโยบายพลังงานรถยนต์จะอัพเดตคุณสมบัติ CURRENT_POWER_POLICY เพื่อแจ้งการเปลี่ยนแปลงไปยัง VHAL

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

ดังที่กล่าวไว้ข้างต้น daemon นโยบายพลังงานของรถยนต์ทำงานในเลเยอร์ระบบ และในแง่ของการจัดการนโยบายพลังงาน ให้ฟังก์ชันที่เกือบจะเหมือนกับ CPMS ที่ทำงานในเลเยอร์เฟรมเวิร์ก นอกจากนี้ สมมติว่าดีมอนนโยบายพลังงานรถยนต์และ 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.
   */
  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.
   */
  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.
   */
  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.
   */
  void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback);
}

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