Manajemen daya

Untuk mendukung pengelolaan daya khusus kendaraan, Android menyediakan layanan CarPowerManagementService dan antarmuka CarPowerManager.

Transisi status dipicu oleh Unit Kontrol Utama Kendaraan (VMCU). Untuk berkomunikasi dengan VMCU, integrator harus menerapkan beberapa komponen. Integrator bertanggung jawab untuk berintegrasi dengan lapisan abstraksi hardware Kendaraan (VHAL) dan implementasi kernel. Integrator juga bertanggung jawab untuk menonaktifkan sumber wake dan memastikan bahwa penonaktifan tidak ditangguhkan secara tidak terbatas.

Terminologi

Istilah berikut digunakan di seluruh dokumen ini:

prosesor aplikasi (AP)
Bagian dari sistem di chip (SoC).
Board Support Package (BSP)
Lapisan software yang berisi firmware booting khusus hardware dan driver perangkat yang memungkinkan sistem operasi tersemat berfungsi di lingkungan hardware tertentu (motherboard), yang terintegrasi dengan sistem operasi tersemat.
CarPowerManager (CPM)
Mengekspos API agar aplikasi mendaftar untuk perubahan status daya.
CarPowerManagementService (CPMS)
Mengimplementasikan mesin status daya mobil, antarmuka dengan VHAL, dan melakukan panggilan akhir ke suspend() dan shutdown().
CarPowerPolicyDaemon (CPPD)
Menampilkan antarmuka AIDL untuk proses native guna mendaftarkan pemroses kebijakan daya.
input atau output tujuan umum (GPIO)
Pin sinyal digital untuk penggunaan tujuan umum.
hardware abstraction layer (HAL)
Lapisan software yang harus berinteraksi dengan semua modul tingkat lebih tinggi lainnya untuk mengakses fungsi hardware.
hibernate
Juga disebut sebagai Suspend-to-Disk (S2D/S4). SoC ditempatkan ke mode daya S4 (hibernasi) dan konten RAM ditulis ke media non-volatil (seperti flash atau disk) dan seluruh sistem dimatikan.
pemroses media (MP)
Lihat sistem di chip (SoC).
sirkuit terpadu pengelolaan daya (PMIC)
Chip yang digunakan untuk mengelola persyaratan daya bagi sistem host.
sistem di chip (SoC)
Prosesor utama yang menjalankan AAOS, biasanya disediakan oleh produsen seperti Intel, MediaTek, Nvidia, Qualcomm, Renesas, dan Texas Instruments.
menangguhkan
Juga disebut sebagai Suspend-to-RAM (S2R atau STR). SoC ditempatkan ke mode daya S3 dan CPU dinonaktifkan sementara RAM tetap aktif.
HAL Kendaraan (VHAL)
Android API yang digunakan untuk berinteraksi dengan jaringan kendaraan. Partner atau OEM Tingkat 1 bertanggung jawab untuk menulis modul ini. Jaringan kendaraan dapat menggunakan lapisan fisik apa pun (seperti CAN, LIN, MOST, dan Ethernet). VHAL memisahkan jaringan kendaraan ini untuk memungkinkan AAOS berinteraksi dengan kendaraan.
Pemroses Antarmuka Kendaraan (VIP)
Lihat MCU Kendaraan.
Unit Kontrol Utama Kendaraan (VMCU)
Mikrokontroler yang menyediakan antarmuka antara jaringan kendaraan dan SoC. SoC berkomunikasi dengan VMCU melalui sinyal USB, UART, SPI, dan GPIO.

Desain sistem

Bagian ini menjelaskan cara AAOS merepresentasikan status daya prosesor aplikasi dan modul mana yang menerapkan sistem pengelolaan daya. Materi ini juga menjelaskan cara kerja modul ini bersama-sama dan bagaimana transisi status biasanya terjadi.

Mesin status daya mobil

AAOS menggunakan mesin status untuk merepresentasikan status daya AP. Mesin status menyediakan status yang diilustrasikan di bawah:

Mesin status daya mobil

Gambar 1. Mesin status daya mobil.

Transisi yang paling umum ditandai dengan warna biru. Berikut adalah status dan transisi umum:

  • Menangguhkan ke RAM. Kendaraan dan SoC nonaktif. Tidak ada kode yang dieksekusi. Daya dipertahankan ke RAM SoC.
  • Tunggu VHAL. Saat pengemudi berinteraksi dengan kendaraan, misalnya, dengan membuka pintu, VMCU akan menerapkan daya ke SoC. AAOS akan dilanjutkan dari Suspend-to-RAM dan memasuki Wait for VHAL, tempatnya menunggu koordinasi dengan VHAL.
  • Aktif. VHAL memberi tahu AAOS untuk memasuki status Aktif. Dalam status ini, AAOS berjalan sepenuhnya dan berinteraksi dengan driver.
  • Penyiapan Penonaktifan. Saat pengemudi selesai mengemudi, VHAL akan memberi tahu AAOS untuk memasuki Persiapan Penonaktifan. Dalam status ini, layar dan audio nonaktif dan AAOS tidak berinteraksi dengan pengemudi. Sistem Android masih berjalan dan bebas mengupdate aplikasi serta sistem Android. Saat update, jika ada, selesai, sistem Android akan memasuki Tunggu VHAL Finish.
  • Tunggu hingga VHAL Selesai. Pada tahap ini, AAOS memberi tahu VHAL bahwa VHAL siap dimatikan. VMCU diharapkan menempatkan SoC dalam Deep Sleep dan untuk menghapus daya dari prosesor aplikasi. AAOS kemudian berada dalam status Suspend-to-RAM, meskipun tidak ada kode yang sedang dieksekusi.

Modul pengelolaan daya

Sistem pengelolaan daya terdiri dari modul berikut:

Nama modul Deskripsi
CarPowerManager Java atau C++ API.
CarPowerManagementService Mengkoordinasikan transisi status daya.
CarPowerPolicyDaemon Berkomunikasi dengan klien kebijakan daya native.
HAL Kendaraan Antarmuka ke VMCU.
Biji Jagung Meletup Menjeda ke implementasi RAM atau disk.

Fitur tidur nyenyak/hibernasi (menangguhkan Android ke RAM/disk) diterapkan di kernel. Fitur ini ditampilkan ke ruang pengguna sebagai file khusus yang terletak di /sys/power/state. AAOS ditangguhkan dengan menulis mem atau disk ke file ini.

CPMS mengoordinasikan status daya dengan layanan dan HAL lainnya. CPMS menerapkan mesin status yang dijelaskan di atas dan mengirimkan notifikasi ke setiap observer saat transisi status daya terjadi. Layanan ini juga menggunakan VHAL untuk mengirim pesan ke hardware.

CPPD mengelola kebijakan daya hingga CPMS mengambil alih. Fitur ini juga mengirimkan notifikasi perubahan kebijakan daya ke pemroses native.

Beberapa properti ditentukan di VHAL. Untuk berkomunikasi dengan VMCU, CPMS membaca dan menulis properti ini. aplikasi dapat menggunakan antarmuka yang ditentukan dalam CPM untuk memantau perubahan status daya. Antarmuka ini juga memungkinkan aplikasi mendaftarkan pemroses kebijakan daya. API ini dapat dipanggil dari Java dan dianotasi dengan @hide / @System API, yang berarti API ini tersedia untuk aplikasi dengan hak istimewa saja. Hubungan antara modul, aplikasi, dan layanan ini diilustrasikan di bawah:

Diagram referensi komponen daya

Gambar 2. Diagram referensi komponen daya.

Urutan pesan

Bagian sebelumnya menjelaskan modul yang membentuk sistem pengelolaan daya. Bagian ini menggunakan contoh enter deep sleep dan exit deep sleep untuk menjelaskan cara modul dan aplikasi berkomunikasi:

Masuk ke fase tidur nyenyak

Hanya VMCU yang dapat memulai deep sleep. Setelah tidur dalam dimulai, VMCU akan mengirimkan notifikasi ke CPMS melalui VHAL. CPMS mengubah status menjadi SHUTDOWN PREPARE dan menyiarkan transisi status ini ke semua observer (aplikasi dan layanan yang memantau CPMS) dengan memanggil metode onStateChanged() dengan ID status baru yang disediakan oleh CPM.

CPM memediasi antara aplikasi/layanan dan CPMS. Metode onStateChanged() untuk aplikasi/layanan dipanggil secara sinkron dalam metode onStateChanged() CPM. Sebagian besar aplikasi dan layanan diwajibkan untuk menyelesaikan persiapannya sebelum kembali dari panggilan ini. Layanan dengan hak istimewa diizinkan untuk melanjutkan persiapannya secara asinkron setelah kembali untuk PRE_SHUTDOWN_PREPARE, SUSPEND_ENTER, POST_SUSPEND_ENTER. Dalam hal ini, layanan dengan hak istimewa harus memanggil complete() pada objek CompletablePowerStateChangeFuture yang disediakan saat menyelesaikan persiapannya. Perhatikan bahwa persiapan asinkron tidak diizinkan untuk SHUTDOWN_PREPARE. Sebelum DEEP_SLEEP_ENTRY dikirim ke VHAL, CPMS secara berkala mengirimkan permintaan penundaan penonaktifan ke VHAL.

Saat semua objek CPM telah menyelesaikan persiapan penonaktifan, CPMS akan mengirim AP_POWER_STATE_REPORT ke VHAL, yang kemudian memberi tahu VMCU bahwa AP siap dijeda. CPMS juga memanggil metode penangguhannya, yang menangguhkan kernel.

Urutan yang dijelaskan di atas diilustrasikan di bawah ini:

Masuk ke fase tidur nyenyak

Gambar 3. Masuk ke fase tidur nyenyak.

Antarmuka pemrograman yang disediakan oleh CPM

Bagian ini menjelaskan Java API yang disediakan oleh CPM untuk aplikasi dan layanan sistem. API ini memungkinkan software sistem untuk:

  • Memantau perubahan status daya di AP.
  • Terapkan kebijakan daya.

Gunakan langkah-langkah berikut untuk memanggil API yang disediakan oleh CPM:

  1. Untuk mendapatkan instance CPM, panggil Car API.
  2. Panggil metode yang sesuai pada objek yang dibuat di Langkah 1.

Membuat objek CarPowerManager

Untuk membuat objek CPM, panggil metode getCarManager() objek Mobil. Metode ini adalah facade yang digunakan untuk membuat objek CPM. Tentukan android.car.Car.POWER_SERVICE sebagai argumen untuk membuat objek CPM.

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

CarPowerStateListener dan pendaftaran

Aplikasi dan layanan sistem dapat menerima notifikasi perubahan status daya dengan menerapkan CarPowerManager.CarPowerStateListener. Antarmuka ini menentukan satu metode onStateChanged(), yang merupakan fungsi callback yang dipanggil saat status daya CPMS berubah. Contoh berikut menentukan class anonim baru yang mengimplementasikan antarmuka:

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

Untuk menginstruksikan objek pemroses ini memantau transisi status daya, buat thread eksekusi baru dan daftarkan pemroses dan thread ini ke objek CPM:

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

Saat status daya diubah, metode onStateChanged() dari objek pemroses akan dipanggil dengan nilai untuk mewakili status daya baru. Asosiasi antara nilai sebenarnya dan status daya ditentukan dalam CarPowerManager dan ditampilkan dalam tabel berikut:

Nama Deskripsi
STATE_ON Masukkan status aktif. Sistem beroperasi sepenuhnya.
STATE_SHUTDOWN_CANCELLED Penonaktifan dibatalkan dan status daya dikembalikan ke status normal.
STATE_SHUTDOWN_ENTER aplikasi diharapkan akan dibersihkan dan siap dimatikan.
STATE_POST_SHUTDOWN_ENTER Persiapan untuk mematikan telah selesai dan VMCU siap dimatikan. Masukkan status penonaktifan.
STATE_PRE_SHUTDOWN_PREPARE Proses penonaktifan diminta, tetapi CPMS belum memulai prosesnya. Layar dan audio masih aktif
STATE_SHUTDOWN_PREPARE Mode Garasi dapat berjalan selama periode tersebut.
STATE_SUSPEND_ENTER aplikasi diharapkan akan dibersihkan dan siap untuk ditangguhkan ke RAM.
STATE_POST_SUSPEND_ENTER Persiapan untuk suspend-to-RAM telah selesai dan VMCU siap untuk suspend-to-RAM. Masukkan status penangguhan.
STATE_SUSPEND_EXIT Bangun dari penangguhan atau lanjutkan dari penangguhan yang dibatalkan.
STATE_HIBERNATION_ENTER aplikasi diharapkan untuk membersihkan dan siap untuk hibernasi.
STATE_POST_HIBERNATION_ENTER Persiapan untuk hibernasi telah selesai dan VMCU siap untuk hibernasi. Masuk ke status hibernasi.
STATE_HIBERNATION_EXIT Bangun dari hibernasi atau lanjutkan dari hibernasi yang dibatalkan.
STATE_WAIT_FOR_VHAL Sistem sedang dimulai, tetapi menunggu untuk membangun komunikasi dengan VHAL sebelum beralih ke status AKTIF.

Pembatalan pendaftaran CarPowerStateListener

Untuk membatalkan pendaftaran semua objek pemroses yang terdaftar ke CPM, panggil metode clearListener:

powerManager.clearListener();

Integrasi sistem pada implementasi Android Anda

Integrator bertanggung jawab atas item berikut:

  • Mengimplementasikan antarmuka kernel untuk menangguhkan Android.
  • Mengimplementasikan fungsi VHAL untuk:
    • Memperluas inisiasi penangguhan atau penonaktifan dari mobil ke Android.
    • Kirim pesan siap dimatikan dari Android ke mobil.
    • Memulai penonaktifan atau penangguhan Android melalui antarmuka kernel Linux.
  • Pastikan semua sumber aktivasi dinonaktifkan saat perangkat dalam mode ditangguhkan.
  • Pastikan aplikasi dimatikan dengan cukup cepat agar tidak menunda proses penonaktifan tanpa batas waktu.
  • Pastikan BSP mengaktifkan (atau menonaktifkan) komponen perangkat sesuai dengan kebijakan daya agar tidak memblokir penangguhan atau hibernasi

Antarmuka kernel: /sys/power/state

AAOS menempatkan perangkat ke mode penangguhan saat aplikasi atau layanan menulis mem untuk penangguhan ke RAM atau disk untuk penangguhan ke disk ke dalam file yang terletak di /sys/power/state. Integrator harus menyediakan fungsi yang memantau file ini dan menempatkan Linux ke dalam status daya penangguhan. Fungsi ini dapat mengirim GPIO ke VMCU untuk memberi tahu VMCU bahwa perangkat telah dimatikan sepenuhnya. Integrator juga bertanggung jawab untuk menghapus kondisi perlombaan antara VHAL yang mengirim pesan akhir ke VMCU dan sistem yang masuk ke mode penangguhan atau penonaktifan.

Tanggung jawab VHAL

VHAL menyediakan antarmuka antara jaringan kendaraan dan Android. VHAL:

  • Memperluas inisialisasi penangguhan atau penonaktifan dari mobil ke Android.
  • Mengirim pesan siap dimatikan dari Android ke mobil.
  • Memulai penonaktifan atau penangguhan Android melalui antarmuka kernel Linux.

Saat CPMS memberi tahu VHAL bahwa CPMS siap dimatikan, VHAL akan mengirimkan pesan siap penonaktifan ke VMCU. Biasanya, periferal on-chip seperti UART, SPI, dan USB mengirimkan pesan. Setelah pesan dikirim, CPMS akan memanggil perintah kernel untuk menangguhkan atau menonaktifkan perangkat. Sebelum melakukannya, VHAL atau BSP dapat mengalihkan GPIO untuk memberi tahu VMCU bahwa aman untuk mencabut daya dari perangkat.

VHAL harus mendukung properti berikut, yang mengontrol pengelolaan daya melalui VHAL:

Nama Deskripsi
AP_POWER_STATE_REPORT Android melaporkan transisi status ke VMCU dengan properti ini, menggunakan nilai enum VehicleApPowerStateReport.
AP_POWER_STATE_REQ VMCU menggunakan properti ini untuk menginstruksikan Android agar bertransisi ke status daya yang berbeda, menggunakan nilai enum VehicleApPowerStateReq.

AP_POWER_STATE_REPORT

Gunakan properti ini untuk melaporkan status pengelolaan daya Android saat ini. Properti ini berisi dua bilangan bulat:

  • int32Values[0]: Enum VehicleApPowerStateReport dari status saat ini.
  • int32Values[1]: Waktu dalam milidetik untuk menunda atau tidur atau menonaktifkan. Arti nilai ini bergantung pada nilai pertama.

Nilai pertama dapat menggunakan salah satu nilai berikut. VehicleApPowerStateReport.aidl berisi deskripsi yang lebih spesifik, yang disimpan di hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle.

Nama nilai Deskripsi Nilai kedua
WAIT_FOR_VHAL AP dimulai dan perlu membangun komunikasi dengan VHAL.
DEEP_SLEEP_ENTRY AP memasuki status tidur dalam. VMCU akan mengaktifkan kembali AP setelah waktu yang ditentukan dalam nilai kedua. Harus ditetapkan
DEEP_SLEEP_EXIT AP keluar dari status tidur nyenyak.
HIBERNATION_ENTRY AP memasuki status hibernasi. VMCU akan mengaktifkan kembali AP setelah waktu yang ditentukan dalam nilai kedua. Harus ditetapkan
HIBERNATION_EXIT AP keluar dari status hibernasi.
SHUTDOWN_POSTPONE Android belum siap dimatikan. VMCU harus menunggu waktu yang ditentukan dalam nilai kedua sebelum menonaktifkan AP. Android dapat meminta penundaan tambahan dengan menerbitkan laporan SHUTDOWN_POSTPONE tambahan. Harus ditetapkan
SHUTDOWN_PREPARE Android sedang bersiap untuk dimatikan. Harus ditetapkan
SHUTDOWN_START AP siap dimatikan. VMCU harus mengaktifkan kembali AP setelah waktu yang ditentukan dalam nilai kedua. (VMCU tidak diwajibkan untuk mendukung fitur pengaktifan berjangka waktu.) Harus ditetapkan
SHUTDOWN_CANCELLED Android berhenti bersiap untuk dimatikan dan akan melanjutkan ke WAIT_FOR_VHAL.
AKTIF Android berjalan normal.

Status dapat ditetapkan secara otonom atau sebagai respons terhadap permintaan melalui VMCU.

AP_POWER_STATE_REQ

Properti ini dikirim oleh VMCU untuk mentransisikan Android ke status daya yang berbeda dan berisi dua bilangan bulat:

  • int32Values[0]: Nilai enum VehicleApPowerStateReq, yang mewakili status baru yang akan ditransisikan.
  • int32Values[1]: Nilai enum VehicleApPowerStateShutdownParam. Nilai ini hanya dikirim untuk pesan SHUTDOWN_PREPARE dan mengirimkan opsi yang dikandungnya ke Android.

Nilai bilangan bulat pertama mewakili status baru yang akan ditransisikan Android. Semantik ditentukan di VehicleApPowerStateReq.aidl dan diberikan di bawah:

Nama nilai Deskripsi
AKTIF AP akan mulai beroperasi sepenuhnya.
SHUTDOWN_PREPARE AP akan bersiap untuk dimatikan. Nilai kedua menunjukkan apakah AP diizinkan untuk menunda penonaktifan dan apakah AP akan dinonaktifkan atau memasuki mode tidur dalam.
CANCEL_SHUTDOWN AP akan berhenti bersiap untuk dimatikan dan bersiap untuk AKTIF.
SELESAI AP sekarang akan dimatikan atau ditangguhkan.

VehicleApPowerStateShutdownParam ditentukan dalam VehicleApPowerStateShutdownParam.aidl. Enum ini memiliki elemen berikut:

Nama nilai Deskripsi
CAN_SLEEP AP dapat memasuki mode tidur dalam, bukan dimatikan sepenuhnya. Penundaan diizinkan.
CAN_HIBERNATE AP dapat memasuki hibernasi, bukan dimatikan sepenuhnya. Penundaan diizinkan.
SHUTDOWN_ONLY AP akan mati. Penundaan diizinkan. Fase tidur dalam tidak diizinkan.
SLEEP_IMMEDIATELY AP dapat memasuki mode tidur nyenyak, tetapi harus segera tidur atau mati. Penundaan tidak diizinkan.
HIBERNATE_IMMEDIATELY AP dapat memasuki mode suspend-to-disk, tetapi harus segera melakukan hibernasi atau dimatikan. Penundaan tidak diizinkan.
SHUTDOWN_IMMEDIATELY AP harus segera dimatikan. Penundaan tidak diizinkan. Fase tidur dalam tidak diizinkan.

Sumber wake

Integrator harus menonaktifkan sumber pengaktifan yang sesuai saat perangkat dalam mode ditangguhkan. Sumber aktivasi umum meliputi detak jantung, modem, Wi-Fi, dan Bluetooth. Satu-satunya sumber aktivasi yang valid harus merupakan interupsi dari VMCU untuk mengaktifkan SoC. Hal ini mengasumsikan bahwa VMCU dapat memproses modem untuk peristiwa aktivasi jarak jauh (seperti mulai mesin jarak jauh). Jika fungsi ini didorong ke AP, sumber wake lain untuk melayani modem harus ditambahkan.

Aplikasi

OEM harus berhati-hati dalam menulis aplikasi agar dapat dimatikan dengan cepat dan tidak menunda proses tanpa batas waktu.

Lampiran

Direktori dalam hierarki kode sumber

Konten Direktori
Kode terkait CarPowerManager. packages/services/Car/car-lib/src/android/car/hardware/power
CarPowerManagementService dan sebagainya. packages/services/Car/service/src/com/android/car/power
Layanan yang menangani VHAL, seperti VehicleHal dan HAlClient. packages/services/Car/service/src/com/android/car/hal
Antarmuka dan definisi properti VHAL. hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle/
Aplikasi contoh untuk memberikan beberapa ide tentang CarPowerManager packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink

Diagram class

Diagram class ini menampilkan class dan antarmuka Java dalam sistem pengelolaan daya:

Diagram class daya

Gambar 4. Diagram class daya.

Hubungan objek

Gambar 5 mengilustrasikan objek mana yang memiliki referensi ke objek lain. Edge berarti objek sumber menyimpan referensi ke objek target. Misalnya, VehicleHAL memiliki referensi ke objek PropertyHalService.

Diagram referensi objek

Gambar 5. Diagram referensi objek.