Um sicherzustellen, dass Hardware- und Softwarekomponenten (z. B. Anzeige, Audio und Sprachinteraktion) nach Bedarf selektiv ein- und ausgeschaltet werden, stellt AAOS eine Energierichtlinie bereit , die aus einer Reihe von erwarteten Ein- und Ausschaltzuständen für Hardware- und Softwarekomponenten besteht . VHAL oder systemprivilegierte Anbieterdienste können eine neue Energierichtlinie anwenden, wenn der Android-Energiestatus wechselt oder wenn Bedingungen erfüllt sind, auf die sie warten.
Das Anwenden einer Energierichtlinie ist in den Zuständen „Warten auf VHAL“ und „Ein“ zulässig. In der Shutdown-Vorbereitung läuft der Garagenmodus und sollte nicht durch eine Änderung des Energiezustands gestört werden. Obwohl eine normale Energierichtlinie nicht angewendet werden kann, wird eine spezielle Energierichtlinie, die Systemenergierichtlinie mit dem Namen „keine Benutzerinteraktion“, in Shutdown Prepare angewendet.
AAOS-Energiezustand
AAOS-Geräte folgen diesem Energiezustandsdiagramm:
Abbildung 1. AAOS-Leistungszustandsdiagramm
Jeder Energiezustand wird im Folgenden beschrieben:
Wert | Beschreibung |
---|---|
Aus | Anwendungsprozessor (AP), Speicher und Peripheriegeräte werden physikalisch nicht mit Strom versorgt. |
Warte auf VHAL |
|
An |
|
Herunterfahren vorbereiten |
|
Warten Sie, bis VHAL fertig ist |
|
Suspend-to-RAM (STR) | Das Fahrzeug und der AP sind ausgeschaltet, es wird kein Code ausgeführt und der AP-RAM wird mit Strom versorgt. |
Softwarearchitektur
Die Energierichtlinienarchitektur ist unten dargestellt und im folgenden Abschnitt definiert:
Abbildung 2. Energierichtlinienarchitektur
Wie ist Energiepolitik definiert?
Implementierer definieren Energierichtlinien in /vendor/etc/automotive/power_policy.xml
, die:
- Definiert die Energierichtlinie.
- Definiert Energierichtliniengruppen, die die standardmäßige Energierichtlinie enthalten und automatisch angewendet werden, wenn Energiestatusübergänge auftreten.
- Überschreiben Sie die Energierichtlinie des Systems.
Energiepolitik
Die Energierichtlinie ist ein Satz erwarteter Energiezustände von Hardware- und Softwarekomponenten. AAOS unterstützt die folgenden Komponenten in der Energierichtlinie:
-
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 standardmäßige Energierichtlinie wird automatisch beim Übergang des Energiezustands angewendet, ist in der Energierichtliniengruppe angegeben. Anbieter können die standardmäßige Energierichtlinie für Wait For VHAL, On und Wait for VHAL Finish (Deep Sleep Entry oder Shutdown Start) definieren.
Energierichtlinie des Systems
AAOS unterstützt nur eine Systemenergierichtlinie, nämlich „keine Benutzerinteraktion“. Die Energierichtlinie des Systems wird angewendet, wenn das Gerät in den Ruhemodus oder Garagenmodus wechselt.
Das Verhalten jeder Komponente in der Energierichtlinie des Systems ist in der folgenden Tabelle aufgeführt. Implementierer können die Erkennung von Bluetooth, NFC und vertrauenswürdigen Geräten in der Energierichtlinie des Systems außer Kraft setzen. Außerkraftsetzungen werden in /vendor/etc/power_policy.xml
angewendet.
Komponenten | Power-Zustand | Konfigurierbar |
---|---|---|
Audio | Aus | Nein |
Medien | Aus | Nein |
Haupt anzeigen | Aus | Nein |
Cluster anzeigen | Aus | Nein |
Beifahrer anzeigen | Aus | Nein |
Fondpassagier anzeigen | Aus | Nein |
Bluetooth | Aus | JAWOHL |
W-lan | AN | Nein |
Mobilfunk | AN | Nein |
Ethernet | AN | Nein |
Projektion | Aus | Nein |
NFC | Aus | JAWOHL |
Eingang | Aus | Nein |
Sprachinteraktion | Aus | Nein |
Visuelle Interaktion | Aus | Nein |
Erkennung vertrauenswürdiger Geräte | AN | JAWOHL |
Ort | Aus | Nein |
Mikrofon | Aus | Nein |
Zentralprozessor | An | Nein |
Interaktion mit dem VHAL
Der in der Systemschicht ausgeführte Auto-Energierichtlinien-Daemon abonniert zwei Eigenschaften, um Anforderungen von der VHAL abzuhören:
-
POWER_POLICY_REQ
schreibt die VHAL die Energierichtlinien-ID in diese Eigenschaft. -
POWER_POLICY_GROUP_REQ
schreibt die VHAL die Energierichtliniengruppen-ID in diese Eigenschaft.
Die aktuelle Energierichtlinie im System kann durch andere Module als VHAL geändert werden. In diesem Fall aktualisiert der Auto-Energierichtlinien-Daemon die Eigenschaft CURRENT_POWER_POLICY
, um die Änderung an die VHAL zu melden.
Interaktion mit nativen Prozessen
Wie oben erwähnt, läuft der Auto-Power-Policy-Daemon in der Systemschicht und bietet im Hinblick auf die Power-Policy-Verwaltung fast die gleiche Funktionalität wie CPMS, das in der Framework-Schicht läuft. Nehmen Sie außerdem an, 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 zum Aktivieren der Energierichtlinienverwaltung:
- Rufen Sie die aktuelle Energierichtlinie ab.
- 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
.