Damit Hardware- und Softwarekomponenten (z. B. Display, Audio und Sprachinteraktion) nach Bedarf selektiv ein- und ausgeschaltet werden können, bietet AAOS eine Energierichtlinie, die aus einer Reihe erwarteter Ein- und Ausschaltzustände für Hardware- und Softwarekomponenten besteht. VHAL oder System-privilegierte Anbieterdienste können eine neue Energierichtlinie anwenden, wenn sich der Android-Energiezustand ändert oder wenn die Bedingungen erfüllt sind, auf die sie warten.
Das Anwenden einer Energierichtlinie ist in den Zuständen „Auf VHAL warten“ und „Ein“ zulässig (manchmal mit Einschränkungen). Im Zustand „Herunterfahren vorbereiten“ wird der Garagenmodus ausgeführt und sollte nicht durch eine Änderung des Energiezustands unterbrochen werden. Obwohl keine reguläre Energierichtlinie angewendet werden kann, wird im Zustand „Herunterfahren vorbereiten“ eine spezielle Energierichtlinie angewendet, nämlich die Systemenergierichtlinie „Keine Nutzerinteraktion“.
AAOS-Energiezustand
AAOS-Geräte folgen diesem Energiezustandsdiagramm:

Abbildung 1 : AAOS-Energiezustandsdiagramm
Jeder Energiezustand wird unten beschrieben:
| Wert | Beschreibung |
|---|---|
| Aus |
|
| Auf VHAL warten |
|
| An |
|
| Herunterfahren vorbereiten |
|
| Auf VHAL warten |
|
| Ruhemodus mit RAM-Speicherung (Suspend-to-RAM, STR) |
|
| Ruhemodus mit Festplattenspeicherung (Suspend-to-disk, STD) |
|
Wie wird die Energierichtlinie definiert?
Implementierer definieren Energierichtlinien in /vendor/etc/automotive/power_policy.xml,
Diese Richtlinien:
- Definieren die Energierichtlinie.
- Definieren Energierichtliniengruppen, die die Standardenergierichtlinie enthalten und automatisch angewendet werden, wenn sich der Energiezustand ändert.
- Überschreiben die Systemenergierichtlinie.
Energierichtlinie
Die Energierichtlinie besteht aus einer Reihe erwarteter Energiezustände von Hardware- und Softwarekomponenten. AAOS unterstützt diese Komponenten in der Energierichtlinie:
|
AUDIO MEDIA DISPLAY BLUETOOTH |
WIFI CELLULAR ETHERNET PROJECTION |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
Anbieter können auch eigene benutzerdefinierte Energiekomponenten für die Verwendung mit Energierichtlinien definieren. Definieren Sie benutzerdefinierte Energiekomponenten in derselben XML-Datei wie Energierichtlinien, wie in diesem Beispiel:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Energierichtliniengruppe
Die Energierichtliniengruppe gibt die Standardenergierichtlinie an, die automatisch bei Änderungen des Energiezustands angewendet werden soll. Anbieter können die Standardenergierichtlinie für „Auf VHAL warten“ (Wait For VHAL), „Ein“ (On) und „Auf VHAL warten“ (Wait for VHAL Finish) definieren (Tiefschlafmodus oder Herunterfahren starten).
Systemenergierichtlinien
AAOS unterstützt zwei Systemenergierichtlinien: Keine Nutzerinteraktion und Ruhemodus vorbereiten. Die Systemenergierichtlinie wird angewendet, wenn das Gerät in den Lautlosmodus, den Garagenmodus, den Ruhemodus mit RAM-Speicherung oder den Ruhemodus mit Festplattenspeicherung wechselt.
In den folgenden Tabellen wird das Verhalten der einzelnen Komponenten in der Systemenergierichtlinie aufgeführt.
Implementierer können Bluetooth, NFC und die Erkennung vertrauenswürdiger Geräte in der
Systemenergierichtlinie Keine Nutzerinteraktion überschreiben. Überschreibungen werden in
/vendor/etc/power_policy.xml angewendet.
Keine Nutzerinteraktion
Das Verhalten der Systemenergierichtlinie Keine Nutzerinteraktion ist in dieser Tabelle definiert:
| Komponenten | Energiezustand | Konfigurierbar |
|---|---|---|
| Audio | Aus | Nein |
| Medien | Aus | Nein |
| Display | Aus | Nein |
| Bluetooth | Aus | Ja |
| WLAN | An | Nein |
| Mobilfunk | An | Nein |
| Ethernet | An | Nein |
| Projektion | Aus | Nein |
| NFC | Aus | Ja |
| Eingabe | Aus | Nein |
| Assistant | Aus | Nein |
| Nutzerinteraktion | Aus | Nein |
| Erkennung vertrauenswürdiger Geräte für die Nutzeranmeldung | An | Ja |
| Standort | Aus | Nein |
| Mikrofon | Aus | Nein |
| CPU | An | Nein |
Ruhemodus vorbereiten
Das Verhalten der Systemenergierichtlinie Ruhemodus vorbereiten ist in dieser Tabelle definiert:
| Komponenten | Energiezustand | OEM-konfigurierbar |
|---|---|---|
| Audio | Aus | Nein |
| Medien | – | Nein |
| Display | – | Nein |
| Bluetooth | Aus | Nein |
| WLAN | Aus | Nein |
| Mobilfunk | – | Nein |
| Ethernet | – | Nein |
| Projektion | – | Nein |
| NFC | – | Nein |
| Eingabe | – | Nein |
| Assistant | – | Nein |
| Nutzerinteraktion | – | Nein |
| Erkennung vertrauenswürdiger Geräte für die Nutzeranmeldung | – | Nein |
| Standort | Aus | Nein |
| Mikrofon | Aus | Nein |
| CPU | Aus | Nein |
Interaktion mit der VHAL
Der in der Systemebene ausgeführte Daemon für die Energierichtlinie des Fahrzeugs abonniert zwei Eigenschaften, um auf Anfragen von der VHAL zu warten:
POWER_POLICY_REQ: Die VHAL schreibt die ID der Energierichtlinie in diese Eigenschaft.POWER_POLICY_GROUP_REQ: Die VHAL schreibt die ID der Energierichtliniengruppe in diese Eigenschaft.
Die aktuelle Energierichtlinie im System kann von anderen Modulen als der VHAL geändert werden. In diesem Fall aktualisiert der Daemon für die Energierichtlinie des Fahrzeugs die CURRENT_POWER_POLICY Eigenschaft, um die Änderung an die VHAL zu senden.
Interaktion mit nativen Prozessen
Der CarPowerManagementService (CPMS) delegiert die Verwaltung der Energierichtlinie an den Daemon für die Energierichtlinie des Fahrzeugs. Der Daemon ist die einzige Quelle der Wahrheit für Energie richtlinien im System. Der Daemon für die Energierichtlinie des Fahrzeugs verwaltet den Status der Energierichtlinie und benachrichtigt den CPMS, die VHAL und andere native Clients über Änderungen.
Der Daemon für die Energierichtlinie des Fahrzeugs exportiert AIDL-Schnittstellen zur Verwendung durch HALs und andere native Prozesse. Sie können benachrichtigt werden, wenn eine neue Energierichtlinie geändert wird. Mit anderen Worten: Wenn sich der Energiezustand ändern muss.
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);
}
Interaktion mit Java-Modulen
CarPowerManager bietet Methoden zur Aktivierung der Verwaltung von Energierichtlinien:
- Aktuelle Energierichtlinie abrufen
- Neue Energierichtlinie anwenden
- Neue Energierichtliniengruppe festlegen
Nur System-privilegierte Module können die Methoden verwenden. Module, die benachrichtigt werden möchten, wenn eine Energierichtlinie angewendet wird, können einen Listener für Änderungen der Energierichtlinie bei
CarPowerManager registrieren.