Pengelolaan daya

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

Transisi keadaan dipicu oleh Vehicle Master Control Unit (VMCU). Untuk berkomunikasi dengan VMCU, integrator harus mengimplementasikan beberapa komponen. Integrator bertanggung jawab untuk berintegrasi dengan lapisan abstraksi perangkat keras Kendaraan (VHAL) dan implementasi kernel. Integrator juga bertanggung jawab untuk menonaktifkan sumber bangun dan memastikan bahwa penghentian tidak ditunda tanpa batas waktu.

Terminologi

Istilah-istilah berikut digunakan di seluruh dokumen ini:

pemroses aplikasi (AP)
Bagian dari sistem pada sebuah chip (SoC) .
Paket Dukungan Dewan (BSP)
Lapisan perangkat lunak yang berisi firmware boot khusus perangkat keras dan driver perangkat yang memungkinkan sistem operasi tertanam berfungsi dalam lingkungan perangkat keras tertentu (motherboard), terintegrasi dengan sistem operasi tertanam.
CarPowerManager (BPS)
Mengekspos API bagi aplikasi untuk mendaftar perubahan status daya.
Layanan Manajemen Tenaga Mobil (CPMS)
Mengimplementasikan mesin status daya mobil, berinteraksi dengan VHAL, dan melakukan panggilan terakhir ke suspend() dan shutdown() .
CarPowerPolicyDaemon (CPPD)
Mengekspos antarmuka AIDL untuk proses asli guna mendaftarkan pendengar kebijakan daya.
input atau output tujuan umum (GPIO)
Pin sinyal digital untuk penggunaan umum.
lapisan abstraksi perangkat keras (HAL)
Lapisan perangkat lunak yang harus berinteraksi dengan semua modul tingkat tinggi lainnya untuk mengakses fungsionalitas perangkat keras.
hibernasi
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.
prosesor media (MP)
Lihat sistem pada chip (SoC) .
sirkuit terpadu manajemen daya (PMIC)
Chip yang digunakan untuk mengatur kebutuhan daya untuk sistem host.
sistem pada sebuah chip (SoC)
Prosesor utama yang menjalankan AAOS, biasanya dipasok oleh produsen seperti Intel, MediaTek, Nvidia, Qualcomm, Renesas, dan Texas Instruments.
menskors
Juga disebut sebagai Suspend-to-RAM (S2R atau STR). SoC ditempatkan ke mode daya S3 dan CPU dimatikan sementara RAM tetap menyala.
Kendaraan HAL (VHAL)
Android API digunakan untuk berinteraksi dengan jaringan kendaraan. Mitra Tingkat 1 atau OEM bertanggung jawab untuk menulis modul ini. Jaringan kendaraan dapat menggunakan lapisan fisik apa pun (seperti CAN, LIN, MOST, dan Ethernet). VHAL mengabstraksi jaringan kendaraan ini untuk memungkinkan AAOS berinteraksi dengan kendaraan.
Prosesor Antarmuka Kendaraan (VIP)
Lihat Kendaraan MCU.
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 bagaimana AAOS mewakili status daya prosesor aplikasi dan modul mana yang mengimplementasikan sistem manajemen daya. Materi ini juga menjelaskan bagaimana modul-modul ini bekerja sama dan bagaimana transisi keadaan biasanya terjadi.

Mesin negara tenaga mobil

AAOS menggunakan mesin negara untuk mewakili keadaan daya AP. Mesin negara menyediakan keadaan yang diilustrasikan di bawah ini:

Mesin negara tenaga mobil

Gambar 1. Mesin keadaan tenaga mobil.

Transisi yang paling umum disorot dengan warna biru. Ini adalah negara bagian dan transisi yang umum:

  • Penangguhan ke RAM. Kendaraan dan SoC mati. Tidak ada kode yang dieksekusi. Daya dipertahankan ke SoC RAM.
  • Tunggu VHAL. Saat pengemudi berinteraksi dengan kendaraan, misalnya dengan membuka pintu, VMCU menyalurkan daya ke SoC. AAOS melanjutkan dari Suspend-to-RAM dan memasuki Wait for VHAL, di mana AAOS menunggu koordinasi dengan VHAL.
  • Pada. VHAL memberitahu AAOS untuk memasuki keadaan Aktif. Dalam keadaan ini, AAOS sepenuhnya berjalan dan berinteraksi dengan pengemudi.
  • Persiapan Shutdown. Ketika pengemudi selesai mengemudi, VHAL memberitahu AAOS untuk masuk ke Shutdown Prepare. Dalam keadaan ini, tampilan dan audio mati dan AAOS tidak berinteraksi dengan driver. Sistem Android masih berjalan dan bebas mengupdate aplikasi dan sistem Android. Ketika pembaruan, jika ada, selesai, sistem Android memasuki Tunggu VHAL Selesai.
  • Tunggu VHAL Selesai. Pada titik ini, AAOS menginformasikan VHAL bahwa ia siap untuk dimatikan. VMCU diharapkan menempatkan SoC dalam kondisi Tidur Nyenyak dan menghilangkan daya dari prosesor aplikasi. AAOS kemudian berada dalam status Suspend-to-RAM, meskipun tidak ada kode yang dieksekusi.

Modul manajemen daya

Sistem manajemen daya terdiri dari modul-modul berikut:

Nama modul Keterangan
Manajer Tenaga Mobil Java atau C++ API.
Layanan Manajemen Tenaga Mobil Mengkoordinasikan transisi negara kekuasaan.
CarPowerPolicyDaemon Berkomunikasi dengan klien kebijakan kekuatan asli.
Kendaraan HAL Antarmuka ke VMCU.
Inti Tangguhkan implementasi RAM atau disk.

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

CPMS mengkoordinasikan kekuasaan negara dengan layanan lain dan HAL. CPMS mengimplementasikan mesin negara yang dijelaskan di atas dan mengirimkan pemberitahuan ke setiap pengamat ketika terjadi transisi keadaan daya. Layanan ini juga menggunakan VHAL untuk mengirim pesan ke perangkat keras.

CPPD mengelola kebijakan kekuasaan sampai CPMS mengambil kendali. Ini juga mengirimkan pemberitahuan perubahan kebijakan daya ke pendengar asli.

Beberapa properti didefinisikan dalam 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 artinya hanya tersedia untuk aplikasi yang memiliki hak istimewa. 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-modul yang membentuk sistem manajemen daya. Bagian ini menggunakan contoh masuk ke mode tidur nyenyak dan keluar dari mode tidur nyenyak untuk menjelaskan cara modul dan aplikasi berkomunikasi:

Masuki tidur nyenyak

Hanya VMCU yang dapat memulai tidur nyenyak. Setelah tidur nyenyak dimulai, VMCU mengirimkan pemberitahuan ke CPMS melalui VHAL. CPMS mengubah status menjadi SHUTDOWN PREPARE dan menyiarkan transisi status ini ke semua pengamat (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 diharuskan 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 seharusnya memanggil complete() pada objek CompletablePowerStateChangeFuture yang disediakan setelah persiapannya selesai. Perhatikan bahwa persiapan asinkron tidak diperbolehkan untuk SHUTDOWN_PREPARE . Sebelum DEEP_SLEEP_ENTRY dikirim ke VHAL, CPMS secara berkala mengirimkan permintaan penundaan shutdown ke VHAL.

Ketika semua objek CPM telah menyelesaikan persiapan pematian, CPMS mengirimkan AP_POWER_STATE_REPORT ke VHAL, yang kemudian memberitahukan VMCU bahwa AP siap untuk ditangguhkan. CPMS juga memanggil metode penangguhannya, yang menangguhkan kernel.

Urutan yang dijelaskan di atas diilustrasikan di bawah ini:

Masuki tidur nyenyak

Gambar 3. Memasuki tidur nyenyak.

Antarmuka pemrograman disediakan oleh CPM

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

  • Pantau perubahan status daya di Titik Akses.
  • Terapkan kebijakan kekuasaan.

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

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

Buat objek CarPowerManager

Untuk membuat objek CPM, panggil metode getCarManager() objek Mobil. Metode ini merupakan fasad 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 pemberitahuan perubahan status daya dengan menerapkan CarPowerManager.CarPowerStateListener . Antarmuka ini mendefinisikan satu metode onStateChanged() , yang merupakan fungsi panggilan balik yang dipanggil ketika status daya CPMS diubah. Contoh berikut mendefinisikan kelas 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 pendengar ini agar memantau transisi status daya, buat thread eksekusi baru dan daftarkan pendengar dan thread ini ke objek CPM:

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

Saat status daya diubah, metode onStateChanged() objek pendengar dipanggil dengan nilai untuk mewakili status daya baru. Hubungan antara nilai aktual dan status daya ditentukan di CarPowerManager dan ditunjukkan dalam tabel berikut:

Nama Keterangan
STATE_ON Masukkan keadaan aktif. Sistem beroperasi penuh.
STATE_SHUTDOWN_CANCELLED Shutdown dibatalkan dan kondisi daya dikembalikan ke kondisi normal.
STATE_SHUTDOWN_ENTER aplikasi diharapkan bersih dan siap untuk dimatikan.
STATE_POST_SHUTDOWN_ENTER Persiapan untuk mematikan telah selesai dan VMCU siap untuk dimatikan. Masuk ke status mati.
STATE_PRE_SHUTDOWN_PREPARE Proses shutdown diminta tetapi CPMS belum memulai prosesnya. Tampilan dan audio masih menyala
STATE_SHUTDOWN_PREPARE Mode Garasi dapat berjalan selama periode tersebut.
STATE_SUSPEND_ENTER aplikasi diharapkan bersih dan siap untuk ditangguhkan ke RAM.
STATE_POST_SUSPEND_ENTER Persiapan untuk penangguhan ke RAM telah selesai dan VMCU siap untuk penangguhan ke RAM. Masuk ke status penangguhan.
STATE_SUSPEND_EXIT Bangun dari penangguhan atau melanjutkan dari penangguhan yang dibatalkan.
STATE_HIBERNATION_ENTER aplikasi diharapkan bersih dan siap untuk hibernasi.
STATE_POST_HIBERNATION_ENTER Persiapan untuk hibernasi telah selesai dan VMCU siap untuk hibernasi. Masuk ke kondisi hibernasi.
STATE_HIBERNATION_EXIT Bangun dari hibernasi atau melanjutkan dari hibernasi yang dibatalkan.
STATE_WAIT_FOR_VHAL Sistem sedang memulai, tetapi menunggu untuk menjalin komunikasi dengan VHAL sebelum masuk ke status ON.

Pembatalan registrasi CarPowerStateListener

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

powerManager.clearListener();

Integrasi sistem pada implementasi Android Anda

Integrator bertanggung jawab atas hal-hal berikut:

  • Menerapkan antarmuka kernel untuk menangguhkan Android.
  • Melaksanakan fungsi VHAL untuk:
    • Menyebarkan inisiasi penangguhan atau pematian dari mobil ke Android.
    • Kirim pesan siap mati dari Android ke mobil.
    • Mulai mematikan atau menangguhkan Android melalui antarmuka kernel Linux.
  • Pastikan semua sumber bangun dinonaktifkan saat perangkat dalam keadaan ditangguhkan.
  • Pastikan aplikasi dimatikan dengan cukup cepat agar tidak menunda proses mematikan tanpa batas waktu.
  • Pastikan BSP menghidupkan (atau mematikan) komponen perangkat sesuai dengan kebijakan daya agar tidak memblokir penundaan atau hibernasi

Antarmuka kernel: /sys/power/state

AAOS menempatkan perangkat ke mode penangguhan ketika 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 status daya tunda. Fungsi ini dapat mengirimkan GPIO ke VMCU untuk memberi tahu VMCU bahwa perangkat telah dimatikan sepenuhnya. Integrator juga bertanggung jawab untuk menghilangkan kondisi balapan apa pun antara VHAL yang mengirimkan pesan terakhir ke VMCU dan sistem masuk ke mode penangguhan atau pematian.

tanggung jawab VHAL

VHAL menyediakan antarmuka antara jaringan kendaraan dan Android. VHAL:

  • Menyebarkan inisiasi penangguhan atau pematian dari mobil ke Android.
  • Mengirim pesan siap mematikan dari Android ke mobil.
  • Memulai penutupan atau penangguhan Android melalui antarmuka kernel Linux.

Ketika CPMS menginformasikan VHAL bahwa ia siap untuk dimatikan, VHAL mengirimkan pesan siap mematikan ke VMCU. Biasanya, periferal on-chip seperti UART, SPI, dan USB mengirimkan pesan. Setelah pesan terkirim, CPMS memanggil perintah kernel untuk menangguhkan atau mematikan perangkat. Sebelum melakukannya, VHAL atau BSP dapat mengaktifkan GPIO untuk menginstruksikan VMCU bahwa aman untuk melepas daya dari perangkat.

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

Nama Keterangan
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 melakukan transisi 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] : VehicleApPowerStateReport enum dari keadaan saat ini.
  • int32Values[1] : Waktu dalam milidetik untuk menunda atau tidur atau mematikan. Arti dari nilai ini tergantung pada nilai pertama.

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

Nama nilai Keterangan Nilai kedua
TUNGGU_FOR_VHAL AP mulai dan perlu menjalin komunikasi dengan VHAL.
DEEP_SLEEP_ENTRY AP memasuki kondisi tidur nyenyak. VMCU harus menghidupkan kembali AP setelah waktu yang ditentukan dalam nilai kedua. Harus diatur
DEEP_SLEEP_EXIT AP keluar dari kondisi tidur nyenyak.
HIBERNATION_ENTRY AP memasuki kondisi hibernasi. VMCU harus menghidupkan kembali AP setelah waktu yang ditentukan dalam nilai kedua. Harus diatur
HIBERNATION_EXIT AP keluar dari kondisi hibernasi.
SHUTDOWN_POSTPONE Android belum siap untuk dimatikan. VMCU harus menunggu waktu yang ditentukan dalam nilai kedua sebelum mematikan AP. Android dapat meminta penundaan tambahan dengan menerbitkan laporan SHUTDOWN_POSTPONE tambahan. Harus diatur
SHUTDOWN_PERSIAPKAN Android sedang bersiap untuk dimatikan. Harus diatur
SHUTDOWN_START AP siap dimatikan. VMCU harus menghidupkan kembali AP setelah waktu yang ditentukan dalam nilai kedua. (VMCU tidak diperlukan untuk mendukung fitur pengaktifan berwaktu.) Harus diatur
SHUTDOWN_CANCELLED Android berhenti bersiap untuk dimatikan dan akan melanjutkan ke WAIT_FOR_VHAL.
PADA Android berjalan normal.

Status dapat diatur secara mandiri atau sebagai respons terhadap permintaan melalui VMCU.

AP_POWER_STATE_REQ

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

  • int32Values[0] : Nilai enum VehicleApPowerStateReq , yang mewakili keadaan baru untuk melakukan transisi.
  • int32Values[1] : Nilai enum VehicleApPowerStateShutdownParam . Nilai ini dikirim hanya untuk pesan SHUTDOWN_PREPARE dan mengirimkan ke Android opsi yang ada di dalamnya.

Nilai bilangan bulat pertama mewakili keadaan baru yang menjadi tujuan transit Android. Semantik didefinisikan dalam VehicleApPowerStateReq.aidl dan disediakan di bawah ini:

Nama nilai Keterangan
PADA AP harus mulai beroperasi penuh.
SHUTDOWN_PERSIAPKAN AP harus bersiap untuk mematikan. Nilai kedua menunjukkan apakah Titik Akses diperbolehkan untuk menunda pemadaman dan apakah Titik Akses akan mati atau memasuki mode tidur nyenyak.
BATAL_SHUTDOWN AP harus berhenti bersiap untuk mematikan dan bersiap untuk AKTIF.
SELESAI AP sekarang akan dimatikan atau ditangguhkan.

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

Nama nilai Keterangan
BISA TIDUR AP bisa memasuki kondisi tidur nyenyak alih-alih mati sepenuhnya. Penundaan diperbolehkan.
CAN_HIBERNATE AP dapat memasuki hibernasi alih-alih mati sepenuhnya. Penundaan diperbolehkan.
SHUTDOWN_ONLY AP harus dimatikan. Penundaan diperbolehkan. Tidur nyenyak tidak diperbolehkan.
TIDUR_SEGERA AP mungkin memasuki kondisi tidur nyenyak, namun harus segera tidur atau dimatikan. Menunda tidak diperbolehkan.
HIBERNATE_SEGERA AP dapat masuk ke suspend-to-disk, tetapi harus segera hibernasi atau dimatikan. Menunda tidak diperbolehkan.
SHUTDOWN_SEGERA AP harus segera dimatikan. Menunda tidak diperbolehkan. Tidur nyenyak tidak diperbolehkan.

Sumber bangun

Integrator harus menonaktifkan sumber bangun yang sesuai ketika perangkat berada dalam mode penangguhan. Sumber bangun yang umum termasuk detak jantung, modem, Wi-Fi, dan Bluetooth. Satu-satunya sumber bangun yang valid harus berupa interupsi dari VMCU untuk membangunkan SoC. Hal ini mengasumsikan bahwa VMCU dapat mendengarkan modem untuk kejadian bangun jarak jauh (seperti start mesin jarak jauh). Jika fungsi ini didorong ke AP, maka sumber bangun lain untuk melayani modem harus ditambahkan.

Aplikasi

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

Lampiran

Direktori di pohon kode sumber

Isi 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 berhubungan dengan VHAL, seperti VehicleHal dan HAlClient . packages/services/Car/service/src/com/android/car/hal
Antarmuka VHAL dan definisi properti. hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle/
Contoh aplikasi untuk memberikan gambaran tentang CarPowerManager packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink

Diagram kelas

Diagram kelas ini menampilkan kelas dan antarmuka Java dalam sistem manajemen daya:

Diagram kelas daya

Gambar 4. Diagram kelas daya.

Hubungan objek

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

Diagram referensi objek

Gambar 5. Diagram referensi objek.