Damit Hardware- und Softwarekomponenten (z. B. Display, Audio und Sprachinteraktion) nach Bedarf selektiv ein- und ausgeschaltet werden, bietet AAOS eine Richtlinie für die Stromversorgung, die aus einer Reihe von erwarteten Ein- und Ausschaltzuständen für Hardware- und Softwarekomponenten besteht. VHAL oder systemprivilegierte Anbieterdienste können eine neue Stromrichtlinie anwenden, wenn der Android-Stromstatus wechselt oder wenn die Bedingungen, auf die sie warten, erfüllt sind.
Das Anwenden einer Stromrichtlinie ist in den Status „Wait for VHAL“, „On“ und „Pre Shutdown Prepare“ (manchmal mit Einschränkungen) zulässig. Im Gegensatz zu „Wait for VHAL“ und „On“ kann für „Pre Shutdown Prepare“ in einer Stromrichtliniengruppe keine Standardstromrichtlinie konfiguriert werden. In der Kernphase „Herunterfahren vorbereiten“ wird der Garagenmodus ausgeführt und sollte nicht durch eine Änderung des Energiestatus unterbrochen werden. Es kann zwar keine reguläre Stromrichtlinie angewendet werden, aber in der Phase „Shutdown Prepare“ wird eine spezielle Stromrichtlinie angewendet, nämlich die Systemstromrichtlinie no user interaction (keine Nutzerinteraktion).
AAOS-Energiezustand
AAOS-Geräte folgen diesem Diagramm für den Energiestatus:

Abbildung 1. AAOS-Energiezustandsdiagramm.
Die einzelnen Stromversorgungsstatus werden nachfolgend beschrieben:
| Wert | Beschreibung |
|---|---|
| Aus |
|
| Auf VHAL warten |
|
| An |
|
| Vorbereitung auf die Einstellung |
|
| Warten, bis VHAL abgeschlossen ist |
|
| Suspend-to-RAM (STR) |
|
| Suspend-to-Disk (STD) |
|
Wie wird die Energieverwaltung definiert?
Implementierer definieren Energie-Richtlinien in /vendor/etc/automotive/power_policy.xml, die Folgendes umfassen:
- Definiert die Stromrichtlinie.
- Definiert Gruppen von Energiestatusrichtlinien, die die Standardenergiestatusrichtlinie enthalten und automatisch angewendet werden, wenn Energiestatusübergänge auftreten.
- Überschreibt die Richtlinie zur Systemstromversorgung.
Richtlinie zur Stromversorgung
Die Energieverwaltungsrichtlinie besteht aus einer Reihe von erwarteten Energiezuständen von Hardware- und Softwarekomponenten. AAOS unterstützt die folgenden Komponenten in der Stromrichtlinie:
|
AUDIO MEDIA DISPLAY BLUETOOTH |
WLAN MOBILFUNK ETHERNET PROJECTION |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
Anbieter können auch eigene benutzerdefinierte Stromversorgungskomponenten für die Verwendung mit Stromversorgungsrichtlinien definieren. Definieren Sie benutzerdefinierte Stromversorgungskomponenten in derselben XML-Datei wie Stromversorgungsrichtlinien, wie in diesem Beispiel:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Gruppe für Energieverwaltung
Die Gruppe für die Energieverwaltung gibt die Standardrichtlinie für die Energieverwaltung an, die bei Übergängen des Energiestatus automatisch angewendet werden soll. Anbieter können die Standardrichtlinie für die Stromversorgung für „Wait for VHAL“ und „On“ definieren.
System-Energierichtlinien
AAOS unterstützt zwei System-Power-Richtlinien: no user interaction (keine Nutzerinteraktion) und suspend prep. (Vorbereitung auf den Ruhezustand). Die System-Energieverwaltungsrichtlinie wird angewendet, wenn das Gerät in den lautlosen Modus, den Garagenmodus, den RAM-Ruhezustand oder den Festplatten-Ruhezustand wechselt.
In den folgenden Tabellen wird das Verhalten der einzelnen Komponenten in der Systemrichtlinie für die Stromversorgung aufgeführt.
Implementierer können die Erkennung von Bluetooth, NFC und vertrauenswürdigen Geräten in der Systemrichtlinie no user interaction (keine Nutzerinteraktion) überschreiben. Überschreibungen werden in /vendor/etc/automotive/power_policy.xml angewendet.
keine Nutzerinteraktion
Das Verhalten der Systemrichtlinie für die Stromversorgung no user interaction (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 |
| Assistent | 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 |
Vorbereitung auf die Sperrung
Das Verhalten der Systemrichtlinie suspend prep wird in dieser Tabelle beschrieben:
| Komponenten | Betriebsart | 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 |
| Assistent | – | Nein |
| Nutzerinteraktion | – | Nein |
| Erkennung vertrauenswürdiger Geräte für die Nutzeranmeldung | – | Nein |
| Standort | Aus | Nein |
| Mikrofon | Aus | Nein |
| CPU | Aus | Nein |
Interaktion mit dem VHAL
Der in der Systemebene ausgeführte Daemon für die Richtlinie zur Stromversorgung des Fahrzeugs abonniert zwei Eigenschaften, um auf Anfragen von der VHAL zu warten:
POWER_POLICY_REQschreibt die VHAL die ID der Stromrichtlinie in diese Eigenschaft.POWER_POLICY_GROUP_REQDie VHAL schreibt die ID der Stromrichtliniengruppe in diese Eigenschaft.
Die aktuelle Stromrichtlinie im System kann von anderen Modulen als VHAL geändert werden. In diesem Fall aktualisiert der Car Power Policy-Daemon die CURRENT_POWER_POLICY-Eigenschaft, um die VHAL über die Änderung zu informieren.
Interaktion mit nativen Prozessen
Der CarPowerManagementService (CPMS) delegiert die Verwaltung von Stromrichtlinien an den Car Power Policy Daemon. Der Daemon ist die einzige verlässliche Quelle für Stromrichtlinien im System. Der Daemon für die Richtlinie zur Stromversorgung des Fahrzeugs verwaltet den Status der Richtlinie zur Stromversorgung und benachrichtigt das CPMS, das VHAL und andere native Clients über Änderungen.
Der Daemon für die Richtlinie zur Stromversorgung des Autos exportiert AIDL-Schnittstellen zur Verwendung durch HALs und andere native Prozesse. Sie können benachrichtigt werden, wenn eine neue Stromrichtlinie geändert wird. Das heißt, wann sich der Stromstatus der einzelnen Geräte ä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 Energieverwaltung:
- Aktuelle Richtlinie für die Stromversorgung abrufen
- Neue Richtlinie für die Stromversorgung anwenden
- Neue Gruppe für Stromrichtlinien festlegen
Nur Module mit Systemberechtigungen können die Methoden verwenden. Module, die benachrichtigt werden möchten, wenn eine Stromrichtlinie angewendet wird, können einen Listener für Änderungen an der Stromrichtlinie bei CarPowerManager registrieren.