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

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

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

คำศัพท์

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

โปรเซสเซอร์แอป (AP)
เป็นส่วนหนึ่งของระบบวงจรรวมบนชิป (SoC)
แพ็กเกจการสนับสนุนบอร์ด (BSP)
เลเยอร์ของซอฟต์แวร์ที่มีเฟิร์มแวร์การบูตและไดรเวอร์อุปกรณ์เฉพาะฮาร์ดแวร์ ซึ่งช่วยให้ระบบปฏิบัติการแบบฝังทำงานได้ในสภาพแวดล้อมฮาร์ดแวร์หนึ่งๆ (แผงวงจรหลัก) ที่ผสานรวมกับระบบปฏิบัติการแบบฝัง
CarPowerManager (CPM)
แสดง API สําหรับแอปเพื่อลงทะเบียนการเปลี่ยนแปลงสถานะพลังงาน
CarPowerManagementService (CPMS)
ใช้เครื่องสถานะกำลังไฟของรถยนต์ อินเทอร์เฟซกับ VHAL และทำการเรียกใช้ suspend() และ shutdown() ครั้งสุดท้าย
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
ระงับ
หรือที่เรียกว่าการระงับไปยัง RAM (S2R หรือ STR) SoC จะเข้าสู่โหมดพลังงาน S3 และปิด CPU ขณะที่ RAM ยังคงเปิดอยู่
HAL ยานพาหนะ (VHAL)
Android API ที่ใช้ในการเชื่อมต่อกับเครือข่ายของยานพาหนะ พาร์ทเนอร์ระดับ 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 จะกลับมาทำงานต่อจากโหมด "ระงับไปยัง RAM" และเข้าสู่โหมด "รอ VHAL" เพื่อรอประสานงานกับ VHAL
  • เปิด VHAL จะบอก AAOS ให้เข้าสู่สถานะเปิด ในสถานะนี้ AAOS จะทำงานอย่างเต็มรูปแบบและโต้ตอบกับไดรเวอร์
  • เตรียมปิดระบบ เมื่อคนขับขับรถเสร็จแล้ว VHAL จะบอก AAOS ให้เข้าสู่การเตรียมการปิดเครื่อง ในสถานะนี้ จอแสดงผลและเสียงจะปิดอยู่ และ AAOS ไม่ได้โต้ตอบกับผู้ขับขี่ ระบบ Android ยังทำงานอยู่และอัปเดตแอปและระบบ Android ได้ เมื่อการอัปเดต (หากมี) เสร็จสมบูรณ์แล้ว ระบบ Android จะเข้าสู่สถานะรอ VHAL Finish
  • รอให้ VHAL เสร็จสิ้น เมื่อถึงจุดนี้ AAOS จะแจ้งให้ VHAL ทราบว่าพร้อมที่จะปิด VMCU คาดว่าจะตั้งค่า SoC ให้เป็นโหมดสลีปลึกและตัดไฟออกจากโปรเซสเซอร์แอป จากนั้น AAOS จะอยู่ในสถานะ "ระงับไปยัง RAM" แม้ว่าจะไม่มีโค้ดใดๆ ทำงานอยู่ก็ตาม

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

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

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

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

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

CPPD จะจัดการนโยบายพลังงานจนกว่า CPMS จะควบคุม รวมถึงจะส่งการแจ้งเตือนการเปลี่ยนแปลงนโยบายพลังงานไปยังผู้ฟังแบบเนทีฟด้วย

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

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

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

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

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

เข้าสู่โหมดหลับลึก

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

CPM จะทำหน้าที่เป็นสื่อกลางระหว่างแอป/บริการกับ CPMS ระบบจะเรียกใช้เมธอด onStateChanged() สําหรับแอป/บริการแบบซิงค์กันในเมธอด onStateChanged() ของ CPM แอปและบริการส่วนใหญ่ต้องเตรียมความพร้อมให้เสร็จสมบูรณ์ก่อนจึงจะกลับมาจากสายนี้ได้ บริการที่มีสิทธิ์จะเตรียมการต่อไปแบบไม่พร้อมกันได้หลังจากกลับมาสำหรับ PRE_SHUTDOWN_PREPARE, SUSPEND_ENTER, POST_SUSPEND_ENTER ในกรณีนี้ บริการที่มีสิทธิ์ควรเรียกใช้ complete() ในออบเจ็กต์ CompletablePowerStateChangeFuture ที่ระบุเมื่อเตรียมเสร็จแล้ว โปรดทราบว่าเราไม่อนุญาตให้ใช้การเตรียมแบบไม่พร้อมกันสำหรับ SHUTDOWN_PREPARE CPMS จะส่งคำขอเลื่อนการปิดเครื่องไปยัง VHAL เป็นระยะๆ ก่อนที่จะส่ง DEEP_SLEEP_ENTRY ไปยัง 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);
     }
};

หากต้องการสั่งให้ออบเจ็กต์ตัวฟังนี้ตรวจสอบการเปลี่ยนสถานะพลังงาน ให้สร้างเธรดการดําเนินการใหม่และลงทะเบียนตัวฟังและเธรดนี้กับออบเจ็กต์ 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 จะส่งข้อความ "พร้อมที่จะปิดเครื่อง" ไปยัง 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]: อาร์เรย์แบบจำกัดของ 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 ต้องปิดลงทันที ไม่อนุญาตให้เลื่อนเวลา ไม่อนุญาตให้ใช้โหมดสลีป

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

ผู้ผสานรวมต้องปิดใช้แหล่งที่มาของการตื่นที่เหมาะสมเมื่ออุปกรณ์อยู่ในโหมดระงับ แหล่งที่มาของการตื่นที่พบบ่อย ได้แก่ Heartbeat, โมเด็ม, 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 แผนภาพการอ้างอิงออบเจ็กต์