Güç politikası

Donanım ve yazılım bileşenlerinin (ör. ekran, ses ve sesli etkileşim) gerektiğinde seçilerek açılıp kapatılmasını sağlamak için AAOS, donanım ve yazılım bileşenleri için beklenen bir dizi açma ve kapatma durumundan oluşan bir güç politikası sunar. VHAL veya sistem ayrıcalıklı tedarikçi hizmetleri, Android güç durumu geçiş yaptığında ya da bekledikleri koşullar karşılandığında yeni bir güç politikası uygulayabilir.

Güç politikası uygulanmasına VHAL'yi Bekleme, Açık ve Kapatma Öncesi Hazırlık durumlarında izin verilir (bazen bazı kısıtlamalarla). VHAL'yi Bekle ve Açık'ın aksine, bir güç politikası grubunda Kapatma Öncesi Hazırlık için varsayılan bir güç politikası yapılandırılamaz. Çekirdek Kapatma Hazırlığı aşamasında Garaj Modu çalışır ve güç durumu değişikliğiyle kesintiye uğramamalıdır. Normal bir güç politikası uygulanamasa da temel Kapatma Hazırlığı aşamasında kullanıcı etkileşimi yok adlı sistem güç politikası olan özel bir güç politikası uygulanır.

AAOS güç durumu

AAOS cihazlar şu güç durumu şemasını izler:

AAOS güç durumu diyagramı

Şekil 1. AAOS güç durumu diyagramı.

Her bir güç durumu aşağıda açıklanmıştır:

Değer Açıklama
Kapalı
  • Uygulama işlemcisine (AP), belleğe ve çevre birimlerine fiziksel olarak güç sağlanmaz.
VHAL'yi bekleme
  • Sürücü araçla etkileşime geçtiğinde (ör. kapıyı açarak) VMCU; AP'ye, belleğe ve çevre birimlerine güç uygular.
  • AAOS, üç durumdan birinden (Kapalı, RAM'e askıya alma (STR, VHAL'ın bitmesini bekle)) geçiş yapar ve ardından VHAL ile koordinasyonu beklediği VHAL'ı bekle durumuna girer.
Açık
  • VHAL, AAOS'a Açık durumuna girmesini söyler. Bu durumda AAOS tamamen çalışır ve sürücüyle etkileşim kurar.
  • Ekran, diğer form faktörleri için Android ekran açma/kapatma çağrıları tarafından değil, güç politikası tarafından kontrol edilir.
Kapatmaya hazırlanma
  • Sürücü sürüşü durdurduğunda VHAL, AAOS'a Kapatma Hazırlığı'na girmesini söyler. Bu işlem, Kapatma Öncesi Hazırlık aşamasıyla başlar ve ardından temel Kapatma Hazırlığı aşaması gelir. Çekirdek aşamasında ekran ve ses kapalıdır ve AAOS, sürücüyle etkileşimde bulunmaz. Android sistemi çalışmaya devam eder ve uygulamaları ve Android sistemini güncelleyebilir. Güncellemeler tamamlandığında Android sistemi, VHAL'nin tamamlanmasını bekleme durumuna geçer.
VHAL'nin tamamlanmasını bekleyin
  • AAOS, VHAL'ye kapatılabileceğini bildirir. Araç Mikro Denetleyici Birimi'nin (VMCU), Çip Üzerinde Sistemi (SoC) Derin Uyku moduna alması ve AP'nin gücünü kesmesi beklenir. AAOS, STR durumuna geçer ancak hiçbir kod yürütülmez.
  • VHAL tamamlanmazsa ve sürücü geri dönerse ana birim (HU) doğrudan VHAL'yi bekleme durumuna geçmelidir.
RAM'e askıya alma (STR)
  • Araç ve AP kapalıdır, hiçbir kod yürütülmez ve AP RAM'e güç sağlanır.
Diske askıya alma (STD)
  • Araç ve AP kapalıdır, kod yürütülmez ve işlem birimi ile AP RAM'e güç verilmez.

Güç politikası nasıl tanımlanır?

Uygulayıcılar, güç politikalarını /vendor/etc/automotive/power_policy.xml içinde tanımlar. Bu politikalar:

  • Güç politikasını tanımlar.
  • Varsayılan güç politikasını içeren ve güç durumu geçişleri gerçekleştiğinde otomatik olarak uygulanan güç politikası gruplarını tanımlar.
  • Sistem güç politikasını geçersiz kılar.

Güç politikası

Güç politikası, donanım ve yazılım bileşenlerinin beklenen güç durumlarından oluşur. AAOS, güç politikasında şu bileşenleri destekler:

SES
MEDYA
EKRAN
BLUETOOTH
KABLOSUZ
HÜCRESEL
ETHERNET
YANSITMA
NFC
INPUT
VOICE_INTERACTION
VISUAL_INTERACTION
TRUSTED_DEVICE_DETECTION
LOCATION
MICROPHONE
CPU

Tedarikçiler, güç politikalarıyla kullanılmak üzere kendi özel güç bileşenlerini de tanımlayabilir. Özel güç bileşenlerini, güç politikalarıyla aynı XML dosyasında tanımlayın. Örneğin:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

Güç politikası grubu

Güç politikası grubu, güç durumu geçişlerinde otomatik olarak uygulanacak varsayılan güç politikasını belirtir. Tedarikçiler, VHAL'yi Bekle ve Açık için varsayılan güç politikasını tanımlayabilir.

VHAL'yi Bekle veya Açık için varsayılan güç politikası, kapatma işleminin iptal edilmesi ve Android'in VHAL'yi Bekle durumuna dönmesi de dahil olmak üzere bu duruma her geçişte uygulanır. Mevcut güç politikası grubunda belirli bir durum için varsayılan güç politikası tanımlanmamışsa araç güç politikası arka plan programı, yerleşik bir güç politikası uygular. Sistem sessiz modda olduğunda bir istisna vardır: Araç güç politikası arka plan programı, mevcut veya istenen normal güç politikasını beklemede olarak kaydeder, normal güç politikası değişikliklerini kilitler ve kullanıcı etkileşimi yok sistem güç politikasını uygular. Güç politikası uygulandığında yalnızca politikanın kapsadığı bileşenler değişir, dokunulmayan bileşenler mevcut durumlarında kalır.

Sistem güç politikaları

AAOS, kullanıcı etkileşimi yok ve askıya alma hazırlığı olmak üzere iki sistem güç politikasını destekler. Sistem güç politikası, cihaz sessiz moda, garaj moduna, RAM'e askıya alma veya diske askıya alma moduna girdiğinde uygulanır.

Aşağıdaki tablolarda, sistem güç politikasındaki her bir bileşenin davranışı listelenmiştir. Uygulayıcılar, kullanıcı etkileşimi yok sistem güç politikasında Bluetooth, NFC ve güvenilen cihaz algılamayı geçersiz kılabilir. Geçersiz kılma işlemleri /vendor/etc/automotive/power_policy.xml içinde uygulanır.

kullanıcı etkileşimi yok

Kullanıcı etkileşimi yok sistem güç politikasının davranışı bu tabloda tanımlanmıştır:

Bileşenler Güç durumu Yapılandırılabilir
Ses Kapalı Hayır
Medya Kapalı Hayır
Ekran Kapalı Hayır
Bluetooth Kapalı Evet
Kablosuz Açık Hayır
Hücresel Açık Hayır
Ethernet Açık Hayır
Projeksiyon Kapalı Hayır
NFC Kapalı Evet
Giriş Kapalı Hayır
Asistan Kapalı Hayır
Kullanıcı etkileşimi Kapalı Hayır
Kullanıcı girişi için güvenilen cihaz algılama Açık Evet
Konum Kapalı Hayır
Mikrofon Kapalı Hayır
CPU Açık Hayır

askıya alma hazırlığı

Askıya alma hazırlığı sistem güç politikasının davranışı bu tabloda tanımlanmıştır:

Bileşenler Güç durumu OEM tarafından yapılandırılabilir
Ses Kapalı Hayır
Medya Yok Hayır
Ekran Yok Hayır
Bluetooth Kapalı Hayır
Kablosuz Kapalı Hayır
Hücresel Yok Hayır
Ethernet Yok Hayır
Projeksiyon Yok Hayır
NFC Yok Hayır
Giriş Yok Hayır
Asistan Yok Hayır
Kullanıcı etkileşimi Yok Hayır
Kullanıcı girişi için güvenilen cihaz algılama Yok Hayır
Konum Kapalı Hayır
Mikrofon Kapalı Hayır
CPU Kapalı Hayır

VHAL ile etkileşim

Sistem katmanında çalışan araç güç politikası arka plan programı, VHAL'den gelen istekleri dinlemek için iki özelliğe abone olur:

  • POWER_POLICY_REQ VHAL, güç politikası kimliğini bu özelliğe yazar.
  • POWER_POLICY_GROUP_REQ VHAL, güç politikası grubu kimliğini bu özelliğe yazar.

Sistemdeki mevcut güç politikası, VHAL dışındaki modüller tarafından değiştirilebilir. Bu durumda, araç güç politikası arka plan programı, değişikliği VHAL'ye bildirmek için CURRENT_POWER_POLICY özelliğini günceller.

Yerel işlemlerle etkileşim

CarPowerManagementService (CPMS), güç politikası yönetimini araç güç politikası arka plan programına devreder. Arka plan programı, sistemdeki güç politikaları için tek doğruluk kaynağıdır. Araç güç politikası daemon'u, güç politikası durumunu yönetir ve CPMS, VHAL ve diğer yerel istemcileri değişiklikler hakkında bilgilendirir.

Araba güç politikası daemon'u, HAL'ler ve diğer yerel işlemler tarafından kullanılmak üzere AIDL arayüzlerini dışa aktarır. Yeni bir güç politikası değiştirildiğinde bildirim alabilirler. Başka bir deyişle, her birinin güç durumunu ne zaman değiştirmesi gerektiğini belirler.

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);
  }

Java modülleriyle etkileşim

CarPowerManager, güç politikası yönetimini etkinleştirmek için yöntemler sunar:

  • Mevcut güç politikasını alma
  • Yeni bir güç politikası uygulama
  • Yeni bir güç politikası grubu ayarlama

Yöntemleri yalnızca sistem ayrıcalıklı modüller kullanabilir. Güç politikası uygulandığında bilgilendirilmek isteyen modüller, CarPowerManager için bir güç politikası değişikliği dinleyicisi kaydedebilir.