Kebijakan daya

Untuk memastikan bahwa komponen hardware dan software (seperti tampilan, audio, dan interaksi suara) diaktifkan dan dinonaktifkan secara selektif sesuai kebutuhan, AAOS menyediakan kebijakan daya, yang terdiri dari rangkaian keadaan nyala dan mati daya yang diharapkan untuk komponen perangkat keras dan perangkat lunak. VHAL, atau layanan vendor dengan hak istimewa sistem, bisa menerapkan kebijakan daya baru bila status daya Android transisi atau ketika kondisi yang ditunggu terpenuhi.

Menerapkan kebijakan daya diizinkan di status Tunggu VHAL dan Aktif (terkadang dengan beberapa batasan). Dalam Persiapan Penonaktifan, Mode Garasi sedang berjalan dan seharusnya tidak terganggu oleh perubahan status daya. Meskipun kebijakan daya reguler tidak dapat diterapkan, kebijakan daya khusus, yaitu kebijakan daya sistem bernama tanpa interaksi pengguna, diterapkan dalam Persiapan Penonaktifan.

Status daya AAOS

Perangkat AAOS mengikuti diagram status daya berikut:

Diagram status daya AAOS

Gambar 1. Diagram status daya AAOS.

Setiap status daya dijelaskan di bawah:

Nilai Deskripsi
Nonaktif
  • Tidak ada daya yang secara fisik diberikan ke prosesor aplikasi (AP), memori, dan periferal.
Menunggu VHAL
  • Saat pengemudi berinteraksi dengan kendaraan (misalnya, dengan membuka pintu), VMCU akan diterapkan daya ke AP, memori. dan periferal.
  • Transisi AAOS dari salah satu dari tiga status (Nonaktif, Suspend-to-RAM (STR, Menunggu VHAL selesai)) dan kemudian memasuki Tunggu VHAL, di mana ia menunggu koordinasi dengan VHAL.
Aktif
  • VHAL menginstruksikan AAOS untuk memasuki status On. Dalam keadaan ini, AAOS sepenuhnya berjalan dan berinteraksi dengan {i>driver<i}.
  • Layar dikontrol oleh kebijakan daya dan bukan oleh panggilan Aktif/Nonaktif tampilan Android untuk perangkat {i>form factor<i} (faktor bentuk).
Persiapan mematikan
  • Saat pengemudi berhenti mengemudi, VHAL menginstruksikan AAOS untuk memasuki Shutdown Prepare. Dalam status ini, tampilan dan audio nonaktif dan AAOS tidak berinteraksi dengan {i>driver<i}. Sistem Android masih berjalan dan dapat mengupdate aplikasi serta sistem Android. Saat pembaruan (jika ada) selesai, sistem Android akan masuk Tunggu VHAL Finish.
Tunggu hingga VHAL selesai
  • AAOS memberi tahu VHAL bahwa fungsi tersebut dapat dimatikan. Vehicle Microcontroller Unit (VMCU) merupakan menempatkan System-on-Chip (SoC) ke dalam Tidur Nyenyak dan mencabut daya dari AP. AAOS kemudian berada dalam status STR, meskipun tidak ada kode yang dijalankan.
  • Jika VHAL tidak selesai dan pengemudi kembali, head unit (HU) harus bertransisi secara langsung untuk Menunggu VHAL.
Tangguhkan ke RAM (STR)
  • Kendaraan dan AP dimatikan, tidak ada kode yang dijalankan, dan daya listrik ke RAM AP.
Tangguhkan ke disk (STD)
  • Kendaraan dan AP mati, tidak ada kode yang dieksekusi, tidak ada daya yang dipertahankan ke unit pemrosesan dan RAM AP.

Bagaimana kebijakan daya ditentukan?

Pengimplementasi menentukan kebijakan daya di /vendor/etc/automotive/power_policy.xml, yang:

  • Menentukan kebijakan daya.
  • Menentukan grup kebijakan daya, yang mencakup kebijakan daya default dan secara otomatis diterapkan saat terjadi transisi status daya.
  • Mengganti 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
EETHERNET
PROYEKSI
NFC
MASUKAN
VOICE_INTERACTION
INTERAKSI_VISUAL
TRUSTED_DEVICE_DETECTION
LOKASI
MIKROPON
CPU

Vendor juga dapat menentukan komponen daya kustomnya sendiri untuk digunakan dengan kebijakan daya. Mendefinisikan 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

Kebijakan daya default secara otomatis diterapkan saat transisi status daya yang ditentukan dalam grup kebijakan daya. Vendor dapat menentukan kebijakan daya {i>default<i} untuk Menunggu VHAL, Aktif, dan Menunggu VHAL Selesai (Deep Sleep Entry atau Shutdown Start).

Kebijakan daya sistem

AAOS mendukung dua kebijakan daya sistem, yaitu tidak ada interaksi pengguna dan persiapan penangguhan. Kebijakan daya sistem diterapkan ketika perangkat masuk ke Mode Senyap, Mode Garasi, Suspend-to-RAM, atau Suspend-to-disk.

Tabel berikut mencantumkan perilaku setiap komponen dalam kebijakan daya sistem. Implementasi dapat mengganti deteksi Bluetooth, NFC, dan Perangkat tepercaya di kebijakan daya sistem tidak ada interaksi pengguna. Penimpaan diterapkan di /vendor/etc/power_policy.xml.

tidak ada interaksi pengguna

Perilaku kebijakan daya sistem tanpa interaksi pengguna ditentukan di tabel:

Komponen Status daya Dapat Dikonfigurasi
Audio Nonaktif Tidak
Media Nonaktif Tidak
Tampilan Nonaktif Tidak
Bluetooth Nonaktif Ya
Wifi 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 oleh OEM
Audio Nonaktif Tidak
Media T/A Tidak
Tampilan T/A Tidak
Bluetooth Nonaktif Tidak
Wifi 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 membuat dua properti berlangganan permintaan dari VHAL:

  • POWER_POLICY_REQ VHAL menulis ID kebijakan daya ke properti ini.
  • POWER_POLICY_GROUP_REQ VHAL menulis ID grup kebijakan daya ke properti ini.

Kebijakan daya saat ini dalam sistem dapat diubah oleh modul selain VHAL. Dalam kasus tersebut, daemon kebijakan daya mobil memperbarui properti CURRENT_POWER_POLICY untuk memberi tahu mengubah VHAL.

Interaksi dengan proses native

Seperti disebutkan di atas, daemon kebijakan daya mobil berjalan di lapisan sistem dan, dalam hal daya pengelolaan kebijakan, menyediakan fungsi yang hampir sama dengan CPMS yang berjalan di lapisan framework. Selain itu, asumsikan bahwa daemon kebijakan daya mobil dan CPMS disinkronkan sepenuhnya.

Daemon kebijakan daya mobil mengekspor antarmuka AIDL untuk digunakan oleh HAL dan proses native lainnya. Mereka dapat diberi tahu saat kebijakan daya baru diubah. Dengan kata lain, ketika masing-masing harus berubah 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
  • Terapkan kebijakan daya yang baru
  • Setel grup kebijakan daya baru

Hanya modul dengan hak istimewa sistem yang dapat menggunakan metode tersebut. Modul yang ingin dijadikan diberi tahu saat kebijakan daya diterapkan dapat mendaftarkan pemroses perubahan kebijakan daya ke CarPowerManager