การจัดการพลังงาน

เพื่อรองรับการจัดการพลังงานเฉพาะยานพาหนะ Android ให้บริการ CarPowerManagementService และอินเทอร์เฟซ CarPowerManager

การเปลี่ยนสถานะจะถูกกระตุ้นโดยหน่วยควบคุมหลักยานพาหนะ (VMCU) ในการสื่อสารกับ VMCU ผู้รวมระบบต้องใช้องค์ประกอบหลายอย่าง ผู้ประกอบมีหน้าที่รับผิดชอบในการบูรณาการกับ Vehicle hardware abstraction layer (VHAL) และการใช้งานเคอร์เนล ผู้รวมระบบยังรับผิดชอบในการปิดใช้งานแหล่งที่มาของการปลุกและทำให้มั่นใจว่าการปิดระบบจะไม่เลื่อนออกไปอย่างไม่มีกำหนด

คำศัพท์เฉพาะทาง

มีการใช้ข้อกำหนดเหล่านี้ตลอดทั้งเอกสารนี้:

โปรเซสเซอร์แอป (AP)
ส่วนหนึ่งของ ระบบบนชิป (SoC)
แพ็คเกจสนับสนุนบอร์ด (BSP)
เลเยอร์ของซอฟต์แวร์ที่มีเฟิร์มแวร์สำหรับบูตเฉพาะฮาร์ดแวร์และไดรเวอร์อุปกรณ์ที่ช่วยให้ระบบปฏิบัติการแบบฝังตัวสามารถทำงานได้ในสภาพแวดล้อมของฮาร์ดแวร์ที่กำหนด (มาเธอร์บอร์ด) ซึ่งรวมเข้ากับระบบปฏิบัติการแบบฝังตัว
คาร์พาวเวอร์แมเนเจอร์ (CPM)
เปิดเผย API สำหรับแอปเพื่อลงทะเบียนการเปลี่ยนแปลงสถานะพลังงาน
บริการการจัดการพลังงานรถยนต์ (CPMS)
ใช้เครื่องสถานะกำลังของรถยนต์ เชื่อมต่อกับ VHAL และทำการเรียกครั้งสุดท้ายเพื่อ suspend() และ shutdown()
CarPowerPolicyDaemon (CPPD)
เปิดเผยอินเทอร์เฟซ AIDL สำหรับกระบวนการดั้งเดิมเพื่อลงทะเบียน Listener นโยบายพลังงาน
อินพุตหรือเอาต์พุตวัตถุประสงค์ทั่วไป (GPIO)
พินสัญญาณดิจิตอลสำหรับการใช้งานทั่วไป
เลเยอร์นามธรรมของฮาร์ดแวร์ (HAL)
เลเยอร์ซอฟต์แวร์ที่โมดูลระดับสูงกว่าอื่นๆ ทั้งหมดต้องโต้ตอบด้วยเพื่อเข้าถึงฟังก์ชันการทำงานของฮาร์ดแวร์
จำศีล
หรือเรียกอีกอย่างว่า Suspend-to-Disk (S2D/S4) SoC ถูกวางเข้าสู่โหมดพลังงาน S4 (ไฮเบอร์เนต) และเนื้อหา RAM จะถูกเขียนลงในสื่อที่ไม่ลบเลือน (เช่น แฟลชหรือดิสก์) และทั้งระบบจะถูกปิด
หน่วยประมวลผลมีเดีย (MP)
ดู ระบบบนชิป (SoC)
วงจรรวมการจัดการพลังงาน (PMIC)
ชิปที่ใช้เพื่อจัดการความต้องการพลังงานสำหรับระบบโฮสต์
ระบบบนชิป (SoC)
โปรเซสเซอร์หลักที่ทำงานบน AAOS ซึ่งโดยทั่วไปจะจัดหาโดยผู้ผลิต เช่น Intel, MediaTek, Nvidia, Qualcomm, Renesas และ Texas Instruments
ระงับ
เรียกอีกอย่างว่า Suspend-to-RAM (S2R หรือ STR) SoC ถูกวางเข้าสู่โหมดพลังงาน S3 และ CPU จะถูกปิดในขณะที่ RAM ยังคงเปิดอยู่
ยานพาหนะ HAL (VHAL)
Android API ที่ใช้ในการเชื่อมต่อกับเครือข่ายของยานพาหนะ พันธมิตรระดับ 1 หรือ OEM มีหน้าที่รับผิดชอบในการเขียนโมดูลนี้ เครือข่ายยานพาหนะสามารถใช้เลเยอร์ทางกายภาพใดก็ได้ (เช่น CAN, LIN, MOST และ Ethernet) VHAL สรุปเครือข่ายยานพาหนะนี้เพื่อให้ AAOS สามารถโต้ตอบกับยานพาหนะได้
โปรเซสเซอร์อินเทอร์เฟซของยานพาหนะ (วีไอพี)
ดู MCU ของยานพาหนะ
หน่วยควบคุมหลักยานพาหนะ (VMCU)
ไมโครคอนโทรลเลอร์ที่ให้อินเทอร์เฟซระหว่างเครือข่ายรถยนต์และ SoC SoC สื่อสารกับ VMCU ผ่านสัญญาณ USB, UART, SPI และ GPIO

การออกแบบระบบ

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

เครื่องสถานะกำลังรถยนต์

AAOS ใช้ เครื่องสถานะ เพื่อแสดงสถานะพลังงานของ AP เครื่องสถานะจะแสดงสถานะที่แสดงด้านล่าง:

เครื่องสถานะกำลังรถยนต์

รูปที่ 1 เครื่องสถานะกำลังไฟรถยนต์

การเปลี่ยนภาพที่พบบ่อยที่สุดจะถูกเน้นด้วยสีน้ำเงิน เหล่านี้คือสถานะและการเปลี่ยนแปลงทั่วไป:

  • ระงับการ RAM ยานพาหนะและ SoC ปิดอยู่ ไม่มีการดำเนินการโค้ด พลังงานยังคงอยู่ที่ SoC RAM
  • รอ VHAL ครับ เมื่อคนขับโต้ตอบกับยานพาหนะ เช่น โดยการเปิดประตู VMCU จะจ่ายไฟให้กับ SoC AAOS ดำเนินการต่อจาก Suspend-to-RAM และเข้าสู่ Wait for VHAL โดยที่รอการประสานงานกับ VHAL
  • บน. VHAL บอกให้ AAOS เข้าสู่สถานะเปิด ในสถานะนี้ AAOS กำลังทำงานและโต้ตอบกับไดรเวอร์โดยสมบูรณ์
  • เตรียมปิดเครื่อง. เมื่อผู้ขับขี่ขับรถเสร็จแล้ว VHAL จะบอก AAOS ให้เข้าสู่ Shutdown Preparation ในสถานะนี้ จอแสดงผลและเสียงจะปิดอยู่ และ AAOS จะไม่โต้ตอบกับไดรเวอร์ ระบบ Android ยังคงทำงานอยู่และสามารถอัปเดตแอปและระบบ Android ได้ฟรี เมื่อการอัปเดตเสร็จสิ้น (ถ้ามี) ระบบ Android จะเข้าสู่ Wait for VHAL Finish
  • รอจนเสร็จสิ้น VHAL ณ จุดนี้ AAOS แจ้งให้ VHAL ทราบว่าพร้อมที่จะปิดระบบแล้ว VMCU คาดว่าจะวาง SoC ไว้ใน Deep Sleep และจะถอดพลังงานออกจากโปรเซสเซอร์แอป AAOS จะอยู่ในสถานะ Suspend-to-RAM แม้ว่าจะไม่มีการเรียกใช้โค้ดก็ตาม

โมดูลการจัดการพลังงาน

ระบบการจัดการพลังงานประกอบด้วยโมดูลเหล่านี้:

ชื่อโมดูล คำอธิบาย
คาร์พาวเวอร์เมเนเจอร์ Java หรือ C++ API
บริการการจัดการพลังงานรถยนต์ ประสานการเปลี่ยนสถานะพลังงาน
CarPowerPolicyDaemon สื่อสารกับไคลเอนต์นโยบายพลังงานดั้งเดิม
ยานพาหนะ HAL การเชื่อมต่อกับ VMCU
เคอร์เนล ระงับการใช้งาน RAM หรือดิสก์

คุณลักษณะการนอนหลับลึก/ไฮเบอร์เนต (การระงับ Android เป็น RAM/ดิสก์) ถูกนำมาใช้ในเคอร์เนล คุณลักษณะนี้ปรากฏต่อพื้นที่ผู้ใช้เป็นไฟล์พิเศษซึ่งอยู่ที่ /sys/power/state AAOS ถูกระงับโดยการเขียน mem หรือ disk ลงในไฟล์นี้

CPMS ประสานงานสถานะพลังงานกับบริการอื่นๆ และ HAL CPMS ใช้งานเครื่องสถานะตามที่อธิบายไว้ข้างต้น และส่งการแจ้งเตือนไปยังผู้สังเกตการณ์ทุกคนเมื่อเกิดการเปลี่ยนแปลงสถานะพลังงาน บริการนี้ยังใช้ VHAL เพื่อส่งข้อความไปยังฮาร์ดแวร์

กปปส. จะจัดการนโยบายด้านพลังงานจนกว่า กปปส. จะเข้าควบคุม นอกจากนี้ยังส่งการแจ้งเตือนการเปลี่ยนแปลงนโยบายพลังงานไปยังผู้ฟังที่เป็นเจ้าของภาษาด้วย

คุณสมบัติบางอย่างถูกกำหนดไว้ใน VHAL ในการสื่อสารกับ VMCU นั้น CPMS จะอ่านและเขียนคุณสมบัติเหล่านี้ แอพสามารถใช้อินเทอร์เฟซที่กำหนดไว้ใน CPM เพื่อตรวจสอบการเปลี่ยนแปลงสถานะพลังงาน อินเทอร์เฟซนี้ยังช่วยให้แอปสามารถลงทะเบียน Listener นโยบายด้านพลังงาน ได้ด้วย API นี้สามารถเรียกได้จาก Java และมีคำอธิบายประกอบด้วย @hide / @System API ซึ่งหมายความว่าสามารถใช้งานได้กับแอปที่มีสิทธิ์ เท่านั้น ความสัมพันธ์ระหว่างโมดูล แอป และบริการเหล่านี้แสดงไว้ด้านล่าง:

แผนภาพอ้างอิงส่วนประกอบกำลัง

รูปที่ 2 แผนภาพอ้างอิงส่วนประกอบกำลัง

ลำดับข้อความ

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

เข้าสู่การนอนหลับลึก

มีเพียง VMCU เท่านั้นที่สามารถเริ่มการนอนหลับลึกได้ เมื่อเริ่มต้นการนอนหลับลึก VMCU จะส่งการแจ้งเตือนไปยัง CPMS ผ่านทาง VHAL CPMS เปลี่ยนสถานะเป็น SHUTDOWN PREPARE และเผยแพร่การเปลี่ยนแปลงสถานะนี้ไปยังผู้สังเกตการณ์ทั้งหมด (แอปและบริการที่ตรวจสอบ CPMS) โดยการเรียกเมธอด onStateChanged() ด้วยรหัสสถานะใหม่ที่ CPM มอบให้

CPM เป็นสื่อกลางระหว่างแอป/บริการและ CPMS เมธอด onStateChanged() สำหรับแอป/บริการถูกเรียกใช้พร้อมกันในเมธอด onStateChanged() ของ CPM แอปและบริการส่วนใหญ่จำเป็นต้องจัดเตรียมให้เสร็จสิ้นก่อนกลับจากสายนี้ บริการที่มีสิทธิพิเศษได้รับอนุญาตให้ดำเนินการเตรียมการต่อไปแบบอะซิงโครนัสหลังจากส่งคืน PRE_SHUTDOWN_PREPARE , SUSPEND_ENTER , POST_SUSPEND_ENTER ในกรณีนี้ บริการสิทธิพิเศษควรจะเรียก complete() บนออบเจ็กต์ CompletablePowerStateChangeFuture ที่ให้ไว้เมื่อเสร็จสิ้นการเตรียมการ โปรดทราบว่าไม่อนุญาตให้มีการเตรียมแบบอะซิงโครนัสสำหรับ SHUTDOWN_PREPARE ก่อนที่จะส่ง DEEP_SLEEP_ENTRY ไปยัง VHAL นั้น CPMS จะส่งคำขอเลื่อนการปิดระบบไปยัง VHAL เป็นระยะ

เมื่อออบเจ็กต์ CPM ทั้งหมดเสร็จสิ้นการเตรียมการปิดระบบแล้ว CPMS จะส่ง AP_POWER_STATE_REPORT ไปยัง VHAL ซึ่งจะแจ้งให้ VMCU ทราบว่า AP พร้อมที่จะระงับแล้ว CPMS ยังเรียกวิธีการระงับซึ่งระงับเคอร์เนล

ลำดับที่อธิบายไว้ข้างต้นแสดงไว้ด้านล่าง:

เข้าสู่การนอนหลับลึก

รูปที่ 3 เข้าสู่การนอนหลับลึก

อินเทอร์เฟซการเขียนโปรแกรมจัดทำโดย CPM

ส่วนนี้อธิบาย Java API ที่ได้รับจาก CPM สำหรับแอปและบริการระบบ API นี้ช่วยให้ซอฟต์แวร์ระบบสามารถ:

  • ตรวจสอบการเปลี่ยนแปลงสถานะพลังงานใน AP
  • ใช้นโยบายด้านพลังงาน

ใช้ขั้นตอนเหล่านี้เพื่อเรียก API ที่ได้รับจาก CPM:

  1. หากต้องการรับอินสแตนซ์ CPM ให้เรียก Car API
  2. เรียกวิธีการที่เหมาะสมบนวัตถุที่สร้างขึ้นในขั้นตอนที่ 1

สร้างวัตถุ CarPowerManager

หากต้องการสร้างออบเจ็กต์ CPM ให้เรียกใช้เมธอด getCarManager() ของออบเจ็กต์ Car วิธีนี้เป็นส่วนหน้าที่ใช้ในการสร้างวัตถุ CPM ระบุ android.car.Car.POWER_SERVICE เป็นอาร์กิวเมนต์เพื่อสร้างออบเจ็กต์ CPM

Car car = Car.createCar(this);
CarPowerManager powerManager =
  (CarPowerManager) car.getCarManager(android.car.Car.POWER_SERVICE);

CarPowerStateListener และการลงทะเบียน

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

private final CarPowerManager.CarPowerStateListener powerListener =
  new CarPowerManager.CarPowerStateListener () {
    @Override
     public void onStateChanged(int state) {
       Log.i(TAG, "onStateChanged() state = " + state);
     }
};

หากต้องการสั่งให้ออบเจ็กต์ Listener นี้ตรวจสอบการเปลี่ยนแปลงสถานะพลังงาน ให้สร้างเธรดการดำเนินการใหม่และลงทะเบียน Listener และเธรดนี้กับออบเจ็กต์ CPM:

executor = new ThreadPerTaskExecutor();
powerManager.setListener(powerListener, executor);

เมื่อสถานะพลังงานมีการเปลี่ยนแปลง เมธอด onStateChanged() ของอ็อบเจ็กต์ Listener จะถูกเรียกใช้พร้อมกับค่าที่แสดงถึงสถานะพลังงานใหม่ การเชื่อมโยงระหว่างค่าจริงและสถานะพลังงานถูกกำหนดไว้ใน CarPowerManager และแสดงอยู่ในตารางต่อไปนี้:

ชื่อ คำอธิบาย
สถานะ_ON เข้าสู่สถานะเปิด ระบบทำงานได้อย่างสมบูรณ์
STATE_SHUTDOWN_CANCELLED การปิดเครื่องถูกยกเลิกและสถานะพลังงานกลับคืนสู่สถานะปกติ
STATE_SHUTDOWN_ENTER คาดว่าแอปจะล้างข้อมูลและพร้อมสำหรับการปิดระบบ
STATE_POST_SHUTDOWN_ENTER การเตรียมการปิดระบบเสร็จสิ้นแล้ว และ VMCU ก็พร้อมที่จะปิดระบบแล้ว เข้าสู่สถานะปิดเครื่อง
STATE_PRE_SHUTDOWN_PREPARE มีการร้องขอกระบวนการปิดเครื่อง แต่ CPMS ยังไม่เริ่มกระบวนการ จอแสดงผลและเสียงยังคงเปิดอยู่
STATE_SHUTDOWN_เตรียมตัว โหมดโรงรถอาจทำงานในช่วงเวลาดังกล่าว
STATE_SUSPEND_ENTER แอปต่างๆ คาดว่าจะล้างข้อมูลและพร้อมสำหรับการระงับไปยัง RAM
STATE_POST_SUSPEND_ENTER การเตรียมการสำหรับ Suspend-to-RAM เสร็จสมบูรณ์แล้ว และ VMCU ก็พร้อมสำหรับ Suspend-to-RAM แล้ว เข้าสู่สถานะระงับ
STATE_SUSPEND_EXIT ตื่นจากการระงับหรือดำเนินการต่อจากการระงับที่ถูกยกเลิก
STATE_HIBERNATION_ENTER คาดว่าแอพจะล้างข้อมูลและพร้อมสำหรับการไฮเบอร์เนต
STATE_POST_HIBERNATION_ENTER การเตรียมการสำหรับการไฮเบอร์เนตเสร็จสิ้นแล้ว และ VMCU พร้อมสำหรับการไฮเบอร์เนต เข้าสู่สถานะไฮเบอร์เนต
STATE_HIBERNATION_EXIT ตื่นจากการไฮเบอร์เนตหรือดำเนินการต่อจากการไฮเบอร์เนตที่ถูกยกเลิก
STATE_WAIT_FOR_VHAL ระบบกำลังเริ่มต้น แต่กำลังรอสร้างการสื่อสารกับ VHAL ก่อนที่จะเข้าสู่สถานะ ON

การยกเลิกการลงทะเบียน CarPowerStateListener

หากต้องการยกเลิกการลงทะเบียนออบเจ็กต์ Listener ทั้งหมดที่ลงทะเบียนกับ CPM ให้เรียกใช้เมธอด clearListener :

powerManager.clearListener();

การรวมระบบในการใช้งาน Android ของคุณ

ผู้ประกอบมีหน้าที่รับผิดชอบในรายการต่อไปนี้:

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

ส่วนต่อประสานเคอร์เนล: /sys/power/state

AAOS วางอุปกรณ์เข้าสู่โหมด Suspend เมื่อแอพหรือบริการเขียน mem สำหรับ Suspend-to-RAM หรือ disk สำหรับ Suspend-to-Disk ลงในไฟล์ที่อยู่ที่ /sys/power/state ผู้ประกอบระบบจะต้องจัดเตรียมฟังก์ชันที่ตรวจสอบไฟล์นี้ และทำให้ Linux เข้าสู่สถานะพลังงานที่ถูกระงับ ฟังก์ชั่นนี้อาจส่ง GPIO ไปยัง VMCU เพื่อแจ้งให้ VMCU ทราบว่าอุปกรณ์ปิดตัวลงอย่างสมบูรณ์ ผู้รวมระบบยังรับผิดชอบในการลบสภาพการแข่งขันระหว่าง VHAL ที่ส่งข้อความสุดท้ายไปยัง VMCU และระบบจะเข้าสู่โหมด Suspend หรือปิดเครื่อง

ความรับผิดชอบของวีเอชแอล

VHAL จัดให้มีอินเทอร์เฟซระหว่างเครือข่ายรถยนต์และ Android วีเอชแอล:

  • เผยแพร่การเริ่มต้นการระงับหรือปิดเครื่องจากรถยนต์ไปยัง Android
  • ส่งข้อความพร้อมปิดระบบจาก Android ไปยังรถยนต์
  • เริ่มต้นการปิดระบบหรือระงับ Android ผ่านทางอินเทอร์เฟซเคอร์เนล Linux

เมื่อ CPMS แจ้ง VHAL ว่าพร้อมที่จะปิดระบบ VHAL จะส่งข้อความพร้อมปิดระบบไปยัง VMCU โดยทั่วไปแล้ว อุปกรณ์ต่อพ่วงบนชิป เช่น UART, SPI และ USB จะส่งข้อความ เมื่อส่งข้อความแล้ว CPMS จะเรียกคำสั่งเคอร์เนลเพื่อระงับหรือปิดอุปกรณ์ ก่อนที่จะดำเนินการดังกล่าว VHAL หรือ BSP อาจสลับ GPIO เพื่อสั่ง VMCU ว่าสามารถถอดพลังงานออกจากอุปกรณ์ได้อย่างปลอดภัย

VHAL ต้องรองรับคุณสมบัติต่อไปนี้ ซึ่งควบคุมการจัดการพลังงานผ่าน VHAL:

ชื่อ คำอธิบาย
AP_POWER_STATE_REPORT Android รายงานสถานะการเปลี่ยนไปใช้ VMCU ด้วยคุณสมบัตินี้ โดยใช้ค่า enum ของ VehicleApPowerStateReport
AP_POWER_STATE_REQ VMCU ใช้คุณสมบัตินี้เพื่อสั่งให้ Android เปลี่ยนไปใช้สถานะพลังงานที่แตกต่างกัน โดยใช้ค่า enum ของ VehicleApPowerStateReq

AP_POWER_STATE_REPORT

ใช้คุณสมบัตินี้เพื่อรายงานสถานะการจัดการพลังงานปัจจุบันของ Android คุณสมบัตินี้ประกอบด้วยจำนวนเต็ม 2 ตัว:

  • int32Values[0] : VehicleApPowerStateReport enum ของสถานะปัจจุบัน
  • int32Values[1] : เวลาเป็นมิลลิวินาทีที่จะเลื่อน เข้าสู่โหมดสลีป หรือปิดเครื่อง ความหมายของค่านี้ขึ้นอยู่กับค่าแรก

ค่าแรกสามารถรับค่าใดค่าหนึ่งต่อไปนี้ได้ VehicleApPowerStateReport.aidl มีคำอธิบายที่เฉพาะเจาะจงมากขึ้น ซึ่งจัดเก็บไว้ใน hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle

ชื่อค่า คำอธิบาย ค่าที่สอง
WAIT_FOR_VHAL AP กำลังเริ่มต้นและจำเป็นต้องสร้างการสื่อสารกับ VHAL
DEEP_SLEEP_ENTRY AP กำลังเข้าสู่สภาวะหลับลึก VMCU ควรเปิด AP อีกครั้งหลังจากเวลาที่ระบุไว้ในค่าที่สอง จะต้องตั้งค่า
DEEP_SLEEP_ออก AP กำลังออกจากสถานะดีพสลีป
HIBERNATION_ENTRY AP กำลังเข้าสู่สถานะไฮเบอร์เนต VMCU ควรเปิด AP อีกครั้งหลังจากเวลาที่ระบุไว้ในค่าที่สอง จะต้องตั้งค่า
ไฮเบอร์เนต_ออก AP กำลังออกจากสถานะไฮเบอร์เนต
SHUTDOWN_POSTPONE Android ยังไม่พร้อมที่จะปิดตัวลง VMCU ควรรอเวลาที่ระบุในค่าที่สองก่อนที่จะปิด AP Android อาจขอเลื่อนเพิ่มเติมโดยการออกรายงาน SHUTDOWN_POSTPONE เพิ่มเติม จะต้องตั้งค่า
ปิด_เตรียมการ Android กำลังเตรียมที่จะปิดตัวลง จะต้องตั้งค่า
SHUTDOWN_START เอพีพร้อมปิดตัวแล้ว VMCU ควรเปิด AP อีกครั้งหลังจากเวลาที่ระบุไว้ในค่าที่สอง (ไม่จำเป็นต้องใช้ VMCU เพื่อรองรับคุณสมบัติการเปิดเครื่องตามกำหนดเวลา) จะต้องตั้งค่า
SHUTDOWN_CANCELLED Android กำลังหยุดเตรียมการปิดระบบและจะดำเนินการไปที่ WAIT_FOR_VHAL
บน แอนดรอยใช้งานได้ปกติ

สามารถตั้งค่าสถานะได้โดยอัตโนมัติหรือตอบสนองต่อคำขอผ่าน VMCU

AP_POWER_STATE_REQ

VMCU ส่งคุณสมบัตินี้เพื่อเปลี่ยน Android ให้เป็นสถานะพลังงานอื่นและประกอบด้วยจำนวนเต็ม 2 ตัว:

  • int32Values[0] : ค่า enum ของ VehicleApPowerStateReq ซึ่งแสดงถึงสถานะใหม่ที่จะเปลี่ยน
  • int32Values[1] : ค่า enum VehicleApPowerStateShutdownParam ค่านี้จะถูกส่งสำหรับข้อความ SHUTDOWN_PREPARE เท่านั้น และส่งไปยัง Android ตามตัวเลือกที่มีอยู่

ค่าจำนวนเต็มแรกแสดงถึงสถานะใหม่ที่ Android จะต้องผ่าน ความหมายถูกกำหนดไว้ใน VehicleApPowerStateReq.aidl และมีให้ด้านล่าง:

ชื่อค่า คำอธิบาย
บน AP ควรเริ่มดำเนินการเต็มรูปแบบ
ปิด_เตรียมการ AP ควรเตรียมการปิดตัวลง ค่าที่สองบ่งชี้ว่า AP ได้รับอนุญาตให้เลื่อนการปิดระบบได้หรือไม่ และ AP ควรคาดหวังที่จะปิดเครื่องหรือเข้าสู่โหมดสลีปลึกหรือไม่
ยกเลิก_ปิดเครื่อง AP ควรหยุดเตรียมปิดตัวและเตรียมเดินหน้าต่อไป
ที่เสร็จเรียบร้อย AP จะถูกปิดหรือระงับในขณะนี้

VehicleApPowerStateShutdownParam ถูกกำหนดไว้ใน VehicleApPowerStateShutdownParam.aidl enum นี้มีองค์ประกอบเหล่านี้:

ชื่อค่า คำอธิบาย
สามารถ_นอนหลับได้ AP สามารถเข้าสู่โหมดสลีปลึกแทนที่จะปิดเครื่องโดยสิ้นเชิง อนุญาตให้เลื่อนออกไปได้
CAN_HIBERNATE AP สามารถเข้าสู่โหมดไฮเบอร์เนตแทนที่จะปิดเครื่องโดยสมบูรณ์ อนุญาตให้เลื่อนออกไปได้
ปิด_เท่านั้น AP ควรปิดตัวลง อนุญาตให้เลื่อนออกไปได้ ไม่อนุญาตให้นอนหลับลึก
SLEEP_ทันที AP อาจเข้าสู่โหมดหลับลึก แต่ต้องเข้าสู่โหมดสลีปหรือปิดเครื่องทันที ไม่อนุญาตให้เลื่อนออกไป
ไฮเบอร์เนต_ทันที AP อาจเข้าสู่โหมด Suspend-to-Disk แต่ต้องไฮเบอร์เนตหรือปิดระบบทันที ไม่อนุญาตให้เลื่อนออกไป
SHUTDOWN_ทันที AP ต้องปิดตัวลงทันที ไม่อนุญาตให้เลื่อนออกไป ไม่อนุญาตให้นอนหลับลึก

แหล่งปลุก

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

แอพ

OEM จะต้องระมัดระวังในการเขียนแอปเพื่อให้สามารถปิดตัวลงได้อย่างรวดเร็วและไม่เลื่อนกระบวนการออกไปอย่างไม่มีกำหนด

ภาคผนวก

ไดเร็กทอรีในแผนผังซอร์สโค้ด

เนื้อหา ไดเรกทอรี
รหัสที่เกี่ยวข้องกับ CarPowerManager packages/services/Car/car-lib/src/android/car/hardware/power
CarPowerManagementService และอื่นๆ packages/services/Car/service/src/com/android/car/power
บริการที่เกี่ยวข้องกับ VHAL เช่น VehicleHal และ HAlClient packages/services/Car/service/src/com/android/car/hal
อินเทอร์เฟซ VHAL และคำจำกัดความคุณสมบัติ hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle/
แอปตัวอย่างเพื่อให้แนวคิดเกี่ยวกับ CarPowerManager packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink

แผนภาพชั้นเรียน

ไดอะแกรมคลาสนี้แสดงคลาส Java และอินเตอร์เฟสในระบบการจัดการพลังงาน:

แผนภาพระดับกำลัง

รูปที่ 4 แผนภาพคลาสกำลัง

ความสัมพันธ์ของวัตถุ

รูปที่ 5 แสดงให้เห็นว่าวัตถุใดมีการอ้างอิงถึงวัตถุอื่น ขอบหมายความว่าวัตถุต้นทางเก็บการอ้างอิงไปยังวัตถุเป้าหมาย ตัวอย่างเช่น VehicleHAL มีการอ้างอิงถึงวัตถุ PropertyHalService

แผนภาพอ้างอิงวัตถุ

รูปที่ 5 แผนภาพอ้างอิงวัตถุ