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

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

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

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

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

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

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

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

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

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

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

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

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

นโยบายพลังงานปัจจุบันในระบบสามารถเปลี่ยนแปลงได้โดยโมดูลอื่นที่ไม่ใช่ 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.
   */
  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 จัดเตรียมวิธีการเปิดใช้งานการจัดการนโยบายพลังงาน:

  • รับนโยบายพลังงานปัจจุบัน
  • รับกลุ่มนโยบายพลังงานปัจจุบัน
  • ใช้นโยบายพลังงานใหม่
  • ตั้งกลุ่มนโยบายพลังงานใหม่

เฉพาะโมดูลที่มีสิทธิพิเศษของระบบเท่านั้นที่สามารถใช้เมธอดนี้ได้ โมดูลที่ต้องการรับแจ้งเมื่อมีการใช้นโยบายพลังงาน สามารถลงทะเบียน Listener การเปลี่ยนแปลงนโยบายพลังงานเป็น CarPowerManager ได้