Um sicherzustellen, dass Hardware- und Softwarekomponenten (z. B. Anzeige, Audio und Sprachinteraktion) je nach Bedarf selektiv ein- und ausgeschaltet werden, stellt AAOS eine Energierichtlinie bereit, die aus einer Reihe erwarteter Ein- und Ausschaltzustände für Hardware- und Softwarekomponenten besteht . VHAL oder systemprivilegierte Anbieterdienste können eine neue Energierichtlinie anwenden, wenn der Android-Energiestatus wechselt 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. In Shutdown Prepare läuft der Garagenmodus und sollte nicht durch eine Änderung des Energiezustands gestört werden. Obwohl keine reguläre Energierichtlinie angewendet werden kann, wird in Shutdown Prepare eine spezielle Energierichtlinie angewendet, nämlich die Systemenergierichtlinie mit dem Namen „Keine Benutzerinteraktion“.
AAOS-Energiestatus
AAOS-Geräte folgen diesem Energiezustandsdiagramm:
Abbildung 1. AAOS-Energiezustandsdiagramm
Jeder Energiezustand wird im Folgenden beschrieben:
Wert | Beschreibung |
---|---|
Aus | Der Anwendungsprozessor (AP), der Speicher und die Peripheriegeräte werden physisch nicht mit Strom versorgt. |
Warten Sie auf VHAL |
|
An |
|
Herunterfahren vorbereiten |
|
Warten Sie, bis VHAL abgeschlossen ist |
|
Suspend-to-RAM (STR) | Das Fahrzeug und der AP sind ausgeschaltet, es wird kein Code ausgeführt und der AP-RAM wird weiterhin mit Strom versorgt. |
Softwarearchitektur
Die Energierichtlinienarchitektur wird unten dargestellt und im folgenden Abschnitt definiert:
Abbildung 2. Architektur der Energiepolitik
Wie wird Machtpolitik definiert?
Implementierer definieren Energierichtlinien in /vendor/etc/automotive/power_policy.xml
, die:
- Definiert die Energierichtlinie.
- Definiert Energierichtliniengruppen, die die Standardenergierichtlinie enthalten und automatisch angewendet werden, wenn Energiezustandsübergänge auftreten.
- Überschreiben Sie die Energierichtlinie des Systems.
Machtpolitik
Bei der Energiepolitik handelt es sich um eine Reihe erwarteter Energiezustände von Hardware- und Softwarekomponenten. AAOS unterstützt die folgenden Komponenten in der Energiepolitik:
-
AUDIO
-
MEDIA
-
DISPLAY_MAIN
-
DISPLAY_CLUSTER
-
DISPLAY_FRONT_PASSENGER
-
DISPLAY_REAR_PASSENGER
-
BLUETOOTH
-
WIFI
-
CELLULAR
-
ETHERNET
-
PROJECTION
-
NFC
-
INPUT
-
VOICE_INTERACTION
-
VISUAL_INTERACTION
-
TRUSTED_DEVICE_DETECTION
-
LOCATION
-
MICROPHONE
-
CPU
Energierichtliniengruppe
Die Standardenergierichtlinie wird automatisch angewendet, wenn der Energiezustandsübergang in der Energierichtliniengruppe angegeben wird. Anbieter können die Standardenergierichtlinie für „Warten auf VHAL“, „Ein“ und „Warten auf VHAL-Ende“ (Tiefschlafeintritt oder Start des Herunterfahrens) definieren.
Systemstromrichtlinie
AAOS unterstützt nur eine Systemenergierichtlinie, nämlich „keine Benutzerinteraktion“. Die Systemenergierichtlinie wird angewendet, wenn das Gerät in den Garagenmodus wechselt.
Das Verhalten jeder Komponente in der Systemenergierichtlinie ist in der folgenden Tabelle aufgeführt. Implementierer können Bluetooth, NFC und die Erkennung vertrauenswürdiger Geräte in der Systemstromrichtlinie außer Kraft setzen. Überschreibungen werden in /vendor/etc/power_policy.xml
angewendet.
Komponenten | Energiezustand | Konfigurierbar |
---|---|---|
Audio | Aus | NEIN |
Medien | Aus | NEIN |
Hauptanzeige | Aus | NEIN |
Cluster anzeigen | Aus | NEIN |
Beifahrer anzeigen | Aus | NEIN |
Fondpassagier anzeigen | Aus | NEIN |
Bluetooth | Aus | JA |
W-lan | AN | NEIN |
Mobilfunk | AN | NEIN |
Ethernet | AN | NEIN |
Projektion | Aus | NEIN |
NFC | Aus | JA |
Eingang | Aus | NEIN |
Sprachinteraktion | Aus | NEIN |
Visuelle Interaktion | Aus | NEIN |
Erkennung vertrauenswürdiger Geräte | AN | JA |
Standort | Aus | NEIN |
Mikrofon | Aus | NEIN |
CPU | An | NEIN |
Interaktion mit dem VHAL
Der in der Systemebene ausgeführte Car-Power-Policy-Daemon abonniert zwei Eigenschaften, um auf Anfragen von der VHAL zu hören:
-
POWER_POLICY_REQ
, die VHAL schreibt die Energierichtlinien-ID in diese Eigenschaft. -
POWER_POLICY_GROUP_REQ
, die VHAL schreibt die Energierichtliniengruppen-ID in diese Eigenschaft.
Die aktuelle Energiepolitik im System kann durch andere Module als VHAL geändert werden. In diesem Fall aktualisiert der Autostrom-Richtlinien-Daemon die Eigenschaft CURRENT_POWER_POLICY
, um die Änderung dem VHAL mitzuteilen.
Interaktion mit nativen Prozessen
Wie oben erwähnt, läuft der Car Power Policy Daemon auf der Systemebene und bietet im Hinblick auf die Energierichtlinienverwaltung nahezu die gleiche Funktionalität wie CPMS, das auf der Framework-Ebene läuft. Gehen Sie außerdem davon aus, dass der Car Power Policy Daemon und CPMS vollständig synchronisiert sind.
Der Car Power Policy Daemon 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 jeder seinen 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. */ 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. */ 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. */ 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. */ void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback); }
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 Energierichtlinienverwaltung:
- Holen Sie sich die aktuelle Energierichtlinie.
- Rufen Sie die aktuelle Energierichtliniengruppe ab
- Wenden Sie eine neue Energierichtlinie an
- Legen Sie eine neue Energierichtliniengruppe fest
Nur systemprivilegierte Module können die Methoden verwenden. Module, die informiert werden möchten, wenn eine Energierichtlinie angewendet wird, können einen Listener für Energierichtlinienänderungen bei CarPowerManager
registrieren.