AAOS, donanım ve yazılım bileşenlerinin (ör. ekran, ses ve sesli etkileşim) gerektiğinde seçmeli olarak açılıp kapatılmasını sağlamak için donanım ve yazılım bileşenlerinin beklenen açma ve kapatma durumlarından oluşan bir güç politikası sunar. VHAL veya sistem ayrıcalıklı satıcı hizmetleri, Android güç durumu geçiş yaptığında ya da bekledikleri koşullar karşılandığında yeni bir güç politikası uygulayabilir.
Güç politikası uygulamasına, VHAL'ı Bekle, Açık ve Kapatmaya Hazırlanma (Pre Shutdown Prepare) durumlarında (bazen bazı kısıtlamalarla birlikte) izin verilir. VHAL'yi Bekle ve Açık'tan farklı olarak, bir güç politikası grubunda Kapatmaya Hazırlanma için varsayılan güç politikası yapılandırılamaz. Temel Kapatmaya Hazırlanma aşamasında Garaj Modu çalışır ve güç durumu değişikliğinden etkilenmemelidir. Normal bir güç politikası uygulanamasa da çekirdek kapatma hazırlığı aşamasında no user interaction adlı sistem güç politikası olan özel bir güç politikası uygulanır.
AAOS güç durumu
AAOS cihazları şu güç durumu şemasını izler:

Şekil 1. AAOS güç durumu şeması.
Her güç durumu aşağıda açıklanmıştır:
| Değer | Açıklama |
|---|---|
| Kapalı |
|
| VHAL'ı bekleme |
|
| Açık |
|
| Kapatmaya hazırlık |
|
| VHAL'nin tamamlanmasını bekleyin |
|
| RAM'e askıya alma (STR) |
|
| Diske askıya alma (STD) |
|
Güç politikası nasıl tanımlanır?
Uygulayıcılar, /vendor/etc/automotive/power_policy.xml içinde güç politikaları 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.
- Sistemin 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 |
WIFI CELLULAR ETHERNET PROJECTION |
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. Güç politikalarıyla aynı XML dosyasında özel güç bileşenlerini 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'ın beklenmesi ve açık durumları için varsayılan güç politikasını tanımlayabilir.
Sistem güç politikaları
AAOS, kullanıcı etkileşimi yok ve askıya alma hazırlığı olmak üzere iki sistem güç politikasını destekler. Cihaz Sessiz Mod, Garaj Modu, RAM'e Askıya Alma veya Diske Askıya Alma moduna girdiğinde sistem güç politikası 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ılmalar /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_REQVHAL, bu özelliğe güç politikası kimliği yazar.POWER_POLICY_GROUP_REQVHAL, 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ı, VHAL'ye değişikliği bildirmek için CURRENT_POWER_POLICY özelliğini günceller.
Yerel süreçlerle etkileşim
CarPowerManagementService (CPMS), güç politikası yönetimini araba güç politikası daemon'una devreder. Daemon, sistemdeki güç politikaları için tek doğru kaynaktır. Araba güç politikası arka plan programı, güç politikası durumunu yönetir ve CPMS, VHAL ve diğer yerel istemcileri değişiklikler konusunda bilgilendirir.
Aracın 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. Diğer bir deyişle, her birinin güç durumunu ne zaman değiştirmesi gerektiği.
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:
- Geçerli güç politikasını alma
- Yeni bir güç politikası uygulama
- Yeni bir güç politikası grubu ayarlama
Yalnızca sistem ayrıcalıklı modüller bu yöntemleri kullanabilir. Güç politikası uygulandığında bilgilendirilmek isteyen modüller, CarPowerManager için güç politikası değişikliği dinleyicisi kaydedebilir.