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

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

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

คำศัพท์

คำศัพท์ต่อไปนี้ใช้ตลอดทั้งเอกสารนี้

ผู้ประมวลผลข้อมูลแอป (AP)
ส่วนหนึ่งของระบบวงจรรวมบนชิป (SoC)
แพ็กเกจการสนับสนุนบอร์ด (BSP)
เลเยอร์ของซอฟต์แวร์ที่มีเฟิร์มแวร์สำหรับบูตและไดรเวอร์อุปกรณ์ที่เฉพาะเจาะจงกับฮาร์ดแวร์ ซึ่งช่วยให้ระบบปฏิบัติการแบบฝังทำงานในสภาพแวดล้อมฮาร์ดแวร์ที่กำหนด (มาเธอร์บอร์ด) ซึ่งผสานรวมกับระบบปฏิบัติการแบบฝัง
CarPowerManager (CPM)
แสดง API ให้แอปลงทะเบียนเพื่อรับการเปลี่ยนแปลงสถานะพลังงาน
CarPowerManagementService (CPMS)
ประสานงานการเปลี่ยนสถานะการเปิด/ปิด เชื่อมต่อกับ VHAL เพื่อควบคุมสถานะการเปิด/ปิด และทำการเรียกสุดท้ายเพื่อระงับและปิด
CarPowerPolicyDaemon (CPPD)
จัดการนโยบายด้านพลังงานและแสดงอินเทอร์เฟซ AIDL สำหรับกระบวนการดั้งเดิมเพื่อลงทะเบียนเครื่องมือฟังนโยบายด้านพลังงาน
อินพุตหรือเอาต์พุตอเนกประสงค์ (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)
API ของ Android ที่ใช้ในการเชื่อมต่อกับเครือข่ายของยานพาหนะ พาร์ทเนอร์ระดับ 1 หรือ OEM เป็นผู้รับผิดชอบในการเขียนโมดูลนี้ เครือข่ายยานพาหนะสามารถใช้เลเยอร์ทางกายภาพใดก็ได้ (เช่น CAN, LIN, MOST และอีเทอร์เน็ต) VHAL จะแยกเครือข่ายของยานพาหนะนี้เพื่อเปิดใช้ AAOS ให้โต้ตอบกับ ยานพาหนะ
ตัวประมวลผลอินเทอร์เฟซยานพาหนะ (VIP)
ดู MCU ของยานพาหนะ
หน่วยควบคุมหลักของยานพาหนะ (VMCU)
ไมโครคอนโทรลเลอร์ที่ให้อินเทอร์เฟซระหว่างเครือข่ายของยานพาหนะกับ SoC โดย SoC จะสื่อสารกับ VMCU ผ่านสัญญาณ USB, UART, SPI และ GPIO

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

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

เครื่องสถานะพลังงานของรถ

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

เครื่องสถานะพลังงานของรถ

รูปที่ 1 เครื่องสถานะพลังงานของรถ

โดยระบบจะไฮไลต์ทรานซิชันที่ใช้กันมากที่สุดเป็นสีน้ำเงิน สถานะและการเปลี่ยนสถานะที่พบบ่อยมีดังนี้

  • พักเครื่องไปที่ RAM ยานพาหนะและ SoC ปิดอยู่ ไม่มีการเรียกใช้โค้ด ระบบจะจ่ายไฟให้กับ RAM ของ SoC
  • รอ VHAL เมื่อผู้ขับขี่โต้ตอบกับยานพาหนะ เช่น โดยการ เปิดประตู VMCU จะจ่ายไฟให้กับ SoC จากนั้น AAOS จะกลับมาทำงานต่อจากโหมด Suspend-to-RAM และเข้าสู่โหมด Wait for VHAL ซึ่งจะรอการประสานงานกับ VHAL
  • เปิด VHAL จะบอกให้ AAOS เข้าสู่สถานะเปิด ในสถานะนี้ AAOS จะทำงานอย่างเต็มที่และโต้ตอบกับผู้ขับขี่
  • เตรียมการก่อนปิด เมื่อคนขับขับรถเสร็จแล้ว VHAL จะบอกให้ AAOS เข้าสู่ระยะเตรียมการก่อนปิดเครื่องโดยการส่ง SHUTDOWN_PREPARE ในสถานะนี้ ผู้ฟังการเปลี่ยนแปลงสถานะการเปิด/ปิดเครื่องจะได้รับ STATE_PRE_SHUTDOWN_PREPARE ซึ่งถือเป็นคำเตือนล่วงหน้าว่าการปิดระบบกำลังจะเริ่มขึ้น
  • เตรียมการปิดเครื่อง เมื่อผู้ฟังทั้งหมดดำเนินการเสร็จสิ้นหรือถึงการหมดเวลาเตรียมการก่อนปิดระบบแล้ว ระบบ Android จะเข้าสู่ระยะการเตรียมการปิดระบบหลัก โดยจะแจ้งให้ผู้ฟังทราบด้วย STATE_SHUTDOWN_PREPARE จอแสดงผลและเสียงปิดอยู่ และ AAOS ไม่ได้โต้ตอบกับผู้ขับ ระบบ Android ยังคงทำงานและสามารถดำเนินการล้างข้อมูลและอัปเดตได้ เช่น การเรียกใช้โหมดโรงรถ
  • รอให้ VHAL เสร็จสิ้น ในขั้นตอนนี้ AAOS จะแจ้ง VHAL ว่า พร้อมที่จะปิดแล้ว คาดว่า VMCU จะทำให้ SoC เข้าสู่โหมดหลับลึกและตัดไฟ จากโปรเซสเซอร์แอป จากนั้น AAOS จะอยู่ในสถานะ Suspend-to-RAM แม้ว่าจะไม่มีการเรียกใช้โค้ดก็ตาม

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

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

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

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

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

CPPD เป็นแหล่งข้อมูลที่เชื่อถือได้สำหรับนโยบายการใช้พลังงาน โดยจะจัดการนโยบายการใช้พลังงานตลอดวงจรของอุปกรณ์ และแจ้งให้ CPMS, VHAL และผู้ฟังอื่นๆ ที่มาพร้อมกับระบบทราบถึงการเปลี่ยนแปลงนโยบายการใช้พลังงาน CPMS จะส่งต่อคำขอเปลี่ยนแปลงนโยบายด้านพลังงานไปยัง CPPD

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

แผนภาพอ้างอิงของคอมโพเนนต์กำลัง

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

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

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

เข้าสู่ช่วงหลับลึก

มีเพียง VMCU เท่านั้นที่เริ่มโหมด Deep Sleep ได้ เมื่อเริ่มโหมด Deep Sleep แล้ว 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() ของออบเจ็กต์รถ เมธอดนี้เป็น Facade ที่ใช้สร้างออบเจ็กต์ 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() ซึ่งเป็นฟังก์ชัน Callback ที่เรียกใช้เมื่อมีการเปลี่ยนแปลงสถานะพลังงานของ 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 และแสดงในตารางต่อไปนี้

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

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

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

powerManager.clearListener();

การผสานรวมระบบในการติดตั้งใช้งาน Android

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

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

อินเทอร์เฟซเคอร์เนล: /sys/power/state

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

ความรับผิดชอบของ VHAL

VHAL มีอินเทอร์เฟซระหว่างเครือข่ายยานพาหนะกับ Android VHAL

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

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

VHAL ต้องรองรับพร็อพเพอร์ตี้ต่อไปนี้ ซึ่งควบคุมการจัดการพลังงานผ่าน VHAL

ชื่อ คำอธิบาย
AP_POWER_STATE_REPORT รายงาน Android จะเปลี่ยนสถานะไปยัง VMCU ด้วยพร็อพเพอร์ตี้นี้ โดยใช้ค่าแจกแจง VehicleApPowerStateReport
AP_POWER_STATE_REQ VMCU ใช้พร็อพเพอร์ตี้นี้เพื่อสั่งให้ Android เปลี่ยนไปใช้สถานะพลังงานต่างๆ โดยใช้ค่าแจกแจง VehicleApPowerStateReq

AP_POWER_STATE_REPORT

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

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

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

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

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

AP_POWER_STATE_REQ

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

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

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

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

VehicleApPowerStateShutdownParam มีคำจำกัดความใน VehicleApPowerStateShutdownParam.aidl การแจงนับนี้มีองค์ประกอบต่อไปนี้

ชื่อค่า คำอธิบาย
CAN_SLEEP AP สามารถเข้าสู่โหมดหลับลึกแทนที่จะปิดเครื่องโดยสมบูรณ์ อนุญาตให้เลื่อนได้
CAN_HIBERNATE AP สามารถเข้าสู่โหมดไฮเบอร์เนตแทนการปิดเครื่องโดยสมบูรณ์ได้ อนุญาตให้เลื่อนได้
SHUTDOWN_ONLY AP ควรปิด อนุญาตให้เลื่อนได้ ไม่อนุญาตให้หลับลึก
SLEEP_IMMEDIATELY AP อาจเข้าสู่โหมดหลับลึก แต่ต้องหลับหรือปิดเครื่องทันที ไม่สามารถเลื่อนได้
HIBERNATE_IMMEDIATELY AP อาจเข้าสู่โหมดพักไปยังดิสก์ แต่ต้องเข้าสู่โหมดไฮเบอร์เนตหรือปิดเครื่องทันที ไม่สามารถเลื่อนได้
SHUTDOWN_IMMEDIATELY AP ต้องปิดตัวลงทันที ไม่อนุญาตให้เลื่อน ไม่อนุญาตให้หลับลึก

แหล่งที่มาของการปลุก

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

แอป

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

ภาคผนวก

ไดเรกทอรีในโครงสร้างแบบต้นไม้ของซอร์สโค้ด

Content ไดเรกทอรี
โค้ดที่เกี่ยวข้องกับ 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 ในระบบการจัดการพลังงาน

แผนภาพคลาส Power

รูปที่ 4 แผนภาพระดับพลังงาน

ความสัมพันธ์ของออบเจ็กต์

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

แผนภาพอ้างอิงออบเจ็กต์

รูปที่ 5 แผนภาพการอ้างอิงออบเจ็กต์