Untuk memastikan komponen hardware dan software (seperti layar, audio, dan interaksi suara) diaktifkan dan dinonaktifkan secara selektif sesuai kebutuhan, AAOS menyediakan kebijakan daya, yang terdiri dari serangkaian status aktif dan nonaktif yang diharapkan untuk komponen hardware dan software. VHAL, atau layanan vendor dengan hak istimewa sistem, dapat menerapkan kebijakan daya baru saat status daya Android berubah atau saat kondisi yang ditunggu terpenuhi.
Penerapan kebijakan daya diizinkan dalam status Wait for VHAL dan On (terkadang dengan beberapa batasan). Dalam Shutdown Prepare, Garage Mode berjalan dan tidak boleh terganggu oleh perubahan status daya. Meskipun kebijakan daya reguler tidak dapat diterapkan, kebijakan daya khusus, yaitu kebijakan daya sistem yang bernama tanpa interaksi pengguna, diterapkan dalam Shutdown Prepare.
Status daya AAOS
Perangkat AAOS mengikuti diagram status daya ini:

Gambar 1. Diagram status daya AAOS.
Setiap status daya dijelaskan di bawah:
| Nilai | Deskripsi |
|---|---|
| Nonaktif |
|
| Menunggu VHAL |
|
| Aktif |
|
| Persiapan penonaktifan |
|
| Tunggu hingga VHAL selesai |
|
| Tunda ke RAM (STR) |
|
| Tidur ke disk (STD) |
|
Bagaimana kebijakan daya ditentukan?
Pelaksana menentukan kebijakan daya di /vendor/etc/automotive/power_policy.xml,
yang:
- Menentukan kebijakan daya.
- Menentukan grup kebijakan daya, yang mencakup kebijakan daya default dan otomatis diterapkan saat transisi status daya terjadi.
- Menggantikan kebijakan daya sistem.
Kebijakan daya
Kebijakan daya terdiri dari serangkaian status daya yang diharapkan dari komponen hardware dan software. AAOS mendukung komponen ini dalam kebijakan daya:
|
AUDIO MEDIA LAYAR BLUETOOTH |
Wi-Fi SELULER ETHERNET PROYEKSI |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
Vendor juga dapat menentukan komponen daya kustom mereka sendiri untuk digunakan dengan kebijakan daya. Tentukan komponen daya kustom dalam file XML yang sama dengan kebijakan daya, seperti dalam contoh ini:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Grup kebijakan daya
Grup kebijakan daya menentukan kebijakan daya default yang akan diterapkan secara otomatis pada transisi status daya. Vendor dapat menentukan kebijakan daya default untuk Wait For VHAL, On, dan Wait for VHAL Finish (Deep Sleep Entry atau Shutdown Start).
Kebijakan daya sistem
AAOS mendukung dua kebijakan daya sistem, yaitu tanpa interaksi pengguna dan persiapan penangguhan. Kebijakan daya sistem diterapkan saat perangkat masuk ke Mode Senyap, Mode Garasi, Ditangguhkan ke RAM, atau Ditangguhkan ke disk.
Tabel berikut mencantumkan perilaku setiap komponen dalam kebijakan daya sistem.
Pelaksana dapat mengganti deteksi Bluetooth, NFC, dan Perangkat tepercaya dalam kebijakan daya sistem tanpa interaksi pengguna. Penggantian diterapkan di
/vendor/etc/power_policy.xml.
tidak ada interaksi pengguna
Perilaku kebijakan daya sistem tanpa interaksi pengguna ditentukan dalam tabel ini:
| Komponen | Status daya | Dapat Dikonfigurasi |
|---|---|---|
| Audio | Nonaktif | Tidak |
| Media | Nonaktif | Tidak |
| Display | Nonaktif | Tidak |
| Bluetooth | Nonaktif | Ya |
| Wi-Fi | Aktif | Tidak |
| Seluler | Aktif | Tidak |
| Ethernet | Aktif | Tidak |
| Proyeksi | Nonaktif | Tidak |
| NFC | Nonaktif | Ya |
| Input | Nonaktif | Tidak |
| Asisten | Nonaktif | Tidak |
| Interaksi pengguna | Nonaktif | Tidak |
| Deteksi perangkat tepercaya untuk login pengguna | Aktif | Ya |
| Lokasi | Nonaktif | Tidak |
| Mikrofon | Nonaktif | Tidak |
| CPU | Aktif | Tidak |
persiapan penangguhan
Perilaku kebijakan daya sistem persiapan penangguhan ditentukan dalam tabel ini:
| Komponen | Status daya | Dapat dikonfigurasi OEM |
|---|---|---|
| Audio | Nonaktif | Tidak |
| Media | T/A | Tidak |
| Display | T/A | Tidak |
| Bluetooth | Nonaktif | Tidak |
| Wi-Fi | Nonaktif | Tidak |
| Seluler | T/A | Tidak |
| Ethernet | T/A | Tidak |
| Proyeksi | T/A | Tidak |
| NFC | T/A | Tidak |
| Input | T/A | Tidak |
| Asisten | T/A | Tidak |
| Interaksi pengguna | T/A | Tidak |
| Deteksi perangkat tepercaya untuk login pengguna | T/A | Tidak |
| Lokasi | Nonaktif | Tidak |
| Mikrofon | Nonaktif | Tidak |
| CPU | Nonaktif | Tidak |
Interaksi dengan VHAL
Daemon kebijakan daya mobil yang berjalan di lapisan sistem akan mendaftarkan dua properti untuk memproses permintaan dari VHAL:
POWER_POLICY_REQVHAL menulis ID kebijakan daya ke properti ini.POWER_POLICY_GROUP_REQVHAL menulis ID grup kebijakan daya ke properti ini.
Kebijakan daya saat ini dalam sistem dapat diubah oleh modul selain VHAL. Dalam hal ini,
daemon kebijakan daya mobil memperbarui properti CURRENT_POWER_POLICY untuk memberi tahu
perubahan pada VHAL.
Interaksi dengan proses native
CarPowerManagementService (CPMS) mendelegasikan pengelolaan kebijakan daya ke daemon kebijakan daya mobil. Daemon adalah satu-satunya sumber tepercaya untuk kebijakan daya di sistem. Daemon kebijakan daya mobil mengelola status kebijakan daya dan memberi tahu CPMS, VHAL, dan klien native lainnya tentang perubahan.
Daemon kebijakan daya mobil mengekspor antarmuka AIDL untuk digunakan oleh HAL dan proses native lainnya. Pengguna dapat diberi tahu saat kebijakan daya baru diubah. Dengan kata lain, saat setiap perangkat harus mengubah status dayanya.
ICarPowerPolicyServer.aidl
package android.frameworks.automotive.powerpolicy;
import android.frameworks.automotive.powerpolicy.CarPowerPolicy;
import android.frameworks.automotive.powerpolicy.CarPowerPolicyFilter;
import android.frameworks.automotive.powerpolicy.ICarPowerPolicyChangeCallback;
import android.frameworks.automotive.powerpolicy.PowerComponent;
/**
* ICarPowerPolicyServer is an interface implemented by the power policy daemon.
* VHAL changes the power policy and the power policy daemon notifies the change to
* registered subscribers. When subscribing to policy changes, a filter can be specified so
* that the registered callbacks can listen only to a specific power component's change.
*/
@VintfStability
interface ICarPowerPolicyServer {
/**
* Gets the current power policy.
* @throws IllegalStateException if the current policy is not set.
*/
CarPowerPolicy getCurrentPowerPolicy();
/**
* Gets whether the power component is turned on or off.
*
* @param componentId Power component ID defined in PowerComponent.aidl to check power
* state.
* @return True if the component's power state is on.
* @throws IllegalArgumentException if the componentId is invalid.
*/
boolean getPowerComponentState(in PowerComponent componentId);
/**
* Subscribes to power policy change.
* Notification is sent to the registered callback when the power policy changes and the
* power state of the components which the callback is interested in changes.
*
* @param callback Callback that is invoked when the power policy changes.
* @param filter The list of components which the callback is interested in.
* @throws IllegalArgumentException if the callback is already registered.
* @throws IllegalStateException if the callback is dead.
*/
void registerPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback,
in CarPowerPolicyFilter filter);
/**
* Unsubscribes from power policy change.
*
* @param callback Callback that doesn't want to receive power policy change.
* @throws IllegalArgumentException if the callback is not registered.
*/
void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback);
/**
* Applies the power policy.
*
* {@code policyId} should be one of power policy IDs defined in
* {@code /vendor/etc/automotive/power_policy.xml} or predefined system power policies.
*
* @param policyId ID of power policy.
* @throws IllegalArgumentException if {@code policyId} is invalid.
*/
void applyPowerPolicy(in @utf8InCpp String policyId);
/**
* Sets the current power policy group.
*
*
{@code policyGroupId} should be one of power policy group IDs defined in
* {@code /vendor/etc/automotive/power_policy.xml}.
*
* @param policyGroupId ID of power policy group.
* @throws IllegalArgumentException if {@code policyGroupId} is invalid.
*/
void setPowerPolicyGroup(in @utf8InCpp String policyGroupId);
}
ICarPowerPolicyChangeCallback.aidl
package android.frameworks.automotive.powerpolicy;
import android.frameworks.automotive.powerpolicy.CarPowerPolicy;
/**
* ICarPowerPolicyChangeCallback is notified when a power policy changes.
*/
@VintfStability
oneway interface ICarPowerPolicyChangeCallback {
/**
* Called when a power policy is fully changed.
*
* @param policy The current policy.
*/
void onPolicyChanged(in CarPowerPolicy policy);
}
Interaksi dengan modul Java
CarPowerManager menyediakan metode untuk mengaktifkan pengelolaan kebijakan daya:
- Mendapatkan kebijakan daya saat ini
- Menerapkan kebijakan daya baru
- Menetapkan grup kebijakan daya baru
Hanya modul dengan hak istimewa sistem yang dapat menggunakan metode ini. Modul yang ingin
mendapatkan informasi saat kebijakan daya diterapkan dapat mendaftarkan pemroses perubahan kebijakan daya ke
CarPowerManager