Android มีCarPowerManagementServiceบริการและCarPowerManagerอินเทอร์เฟซเพื่อรองรับการจัดการพลังงานเฉพาะของยานพาหนะ
การเปลี่ยนสถานะจะทริกเกอร์โดยหน่วยควบคุมหลักของยานพาหนะ (VMCU) หากต้องการสื่อสารกับ VMCU ผู้ติดตั้งต้องใช้คอมโพเนนต์หลายอย่าง ผู้ผสานรวมมีหน้าที่ผสานรวม กับระดับชั้นการจัดการฮาร์ดแวร์โดยตรงของยานพาหนะ (VHAL) และการใช้งานเคอร์เนล นอกจากนี้ ผู้ให้บริการผสานรวมยัง มีหน้าที่ปิดแหล่งที่มาของการปลุกและตรวจสอบว่าไม่มีการเลื่อนการปิดระบบ ออกไปอย่างไม่มีกำหนด
คำศัพท์
คำศัพท์ต่อไปนี้ใช้ตลอดทั้งเอกสารนี้
การออกแบบระบบ
ส่วนนี้จะอธิบายวิธีที่ 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 จัดเตรียมไว้ให้
- หากต้องการรับอินสแตนซ์ CPM ให้เรียกใช้ Car API
- เรียกใช้เมธอดที่เหมาะสมในออบเจ็กต์ที่สร้างในขั้นตอนที่ 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 ในระบบการจัดการพลังงาน

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

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