Um sicherzustellen, dass Hardware- und Softwarekomponenten (wie Display-, Audio- und Sprachinteraktion) selektiv ein- und ausgeschaltet werden, bietet AAOS eine Stromversorgungsrichtlinie, die aus einer erwartete Ein- und Ausschaltstatus für Hardware- und Softwarekomponenten. VHAL oder Anbieterdienste mit Systemprivilegierung können eine neue Energierichtlinie anwenden, wenn die Android-Stromversorgung oder wenn Bedingungen erfüllt sind, auf die sie warten.
Das Anwenden einer Energierichtlinie ist im Status „Auf VHAL warten“ und „Auf VHAL warten“ und Aktiviert (manchmal mit Einschränkungen). Im Modus „Vorbereitung des Herunterfahrens“ wird der Garagenmodus ausgeführt. durch eine Änderung des Energiezustands nicht gestört werden. Obwohl keine normale Energierichtlinie angewendet werden kann, eine spezielle Richtlinie für die Stromversorgung, d. h. die Richtlinie "Keine Nutzerinteraktion", Vorbereiten des Herunterfahrens.
AAOS-Stromzustand
AAOS-Geräte folgen diesem Energiestatusdiagramm:
Abbildung 1: Diagramm des AAOS-Stromzustands
Jeder Zustand wird nachfolgend beschrieben:
Wert | Beschreibung |
---|---|
Aus |
|
Auf VHAL warten |
|
An |
|
Vorbereitung zum Herunterfahren |
|
Warten Sie, bis VHAL abgeschlossen ist |
|
RAM aussetzen (STR) |
|
Anhalten-to-Disk (STD) |
|
Wie ist die Richtlinie zur Energieversorgung 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 wird angewendet, wenn der Stromzustand wechselt.
- Überschreibt die Richtlinie zur Stromversorgung des Systems.
Stromversorgungsrichtlinie
Die Stromversorgungsrichtlinie umfasst eine Reihe von erwarteten Energiezuständen der Hardware- und Softwarekomponenten. AAOS unterstützt die folgenden Komponenten in der Stromversorgungsrichtlinie:
AUDIO MEDIEN DISPLAY Bluetooth |
WLAN MOBILGERÄT ETHERNET PROGNOSE |
NFC EINGABE SPRACHINTERAKTION VISUAL_INTERACTION (VISUAL_INTERACTION) |
Vertrauenswürdige Geräteerkennung STANDORT MIKROFON Prozessor |
Anbieter können auch eigene benutzerdefinierte Komponenten für Stromversorgungsrichtlinien definieren. Fokus definieren benutzerdefinierte Leistungskomponenten in derselben XML-Datei wie Leistungsrichtlinien, wie in diesem Beispiel:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Energierichtliniengruppe
Die standardmäßige Stromversorgungsrichtlinie wird beim Übergang in den Stromzustand automatisch angewendet: die in der Gruppe für die Stromversorgungsrichtlinie angegeben ist. Anbieter können die standardmäßige Stromversorgungsrichtlinie für Warten Sie auf VHAL, Ein und Warten, bis VHAL abgeschlossen ist (bei tiefem Schlaf oder bei Start des Herunterfahrens).
Richtlinien für die Stromversorgung des Systems
AAOS unterstützt zwei Energierichtlinien des Systems, bei denen es sich um keine Nutzerinteraktion handelt und Vorbereitung beenden. Die Richtlinie zur Stromversorgung des Systems wird angewendet, wenn das Gerät Lautlos-Modus, Garage-Modus, Sperren im RAM oder Anhalten-to-Disk.
In den folgenden Tabellen ist das Verhalten der einzelnen Komponenten in der Richtlinie zur Stromversorgung des Systems aufgeführt.
Implementierte Implementierungen können die Bluetooth-, NFC- und vertrauenswürdigen Geräteerkennung in den
Richtlinie zur Stromversorgung ohne Nutzerinteraktion. Überschreibungen werden angewendet in
/vendor/etc/power_policy.xml
Keine Nutzerinteraktion
Hier ist das Verhalten der Stromversorgungsrichtlinie des Systems Keine Nutzerinteraktion definiert Tabelle:
Komponenten | Stromversorgung | Konfigurierbar |
---|---|---|
Audio | Aus | Nein |
Medien | Aus | Nein |
Anzeige | Aus | Nein |
Bluetooth | Aus | Ja |
WLAN | An | Nein |
Mobilfunk | An | Nein |
Ethernet | An | Nein |
Projektion | Aus | Nein |
NFC | Aus | Ja |
Eingang | Aus | Nein |
Assistent | Aus | Nein |
Nutzerinteraktion | Aus | Nein |
Erkennung vertrauenswürdiger Geräte für Nutzeranmeldung | An | Ja |
Standort | Aus | Nein |
Mikrofon | Aus | Nein |
CPU | An | Nein |
Vorbereitung unterbrechen
In der folgenden Tabelle ist das Verhalten der Richtlinie für die Stromversorgung des Systems zur Vorbereitung der Sperrung definiert:
Komponenten | Stromzustand | Vom OEM konfigurierbar |
---|---|---|
Audio | Aus | Nein |
Medien | – | Nein |
Anzeige | – | Nein |
Bluetooth | Aus | Nein |
WLAN | Aus | Nein |
Mobilfunk | – | Nein |
Ethernet | – | Nein |
Projektion | – | Nein |
NFC | – | Nein |
Eingang | – | Nein |
Assistent | – | Nein |
Nutzerinteraktion | – | Nein |
Erkennung vertrauenswürdiger Geräte für Nutzeranmeldung | – | Nein |
Standort | Aus | Nein |
Mikrofon | Aus | Nein |
CPU | Aus | Nein |
Interaktion mit dem VHAL
Der auf der Systemebene ausgeführte Daemon für die Richtlinie zur Stromversorgung des Autos abonniert zwei Properties, die überwacht werden sollen Anfragen vom VHAL:
POWER_POLICY_REQ
: Die VHAL schreibt die Energierichtlinien-ID in dieses Attribut.POWER_POLICY_GROUP_REQ
: Der VHAL schreibt die Gruppen-ID der Energierichtlinie. für diese Property.
Die aktuelle Stromversorgungsrichtlinie im System kann durch andere Module als VHAL geändert werden. In diesem Fall
Der Daemon der Richtlinie zur Stromversorgung des Autos aktualisiert das Attribut CURRENT_POWER_POLICY
, um die
zum VHAL wechseln.
Interaktion mit nativen Prozessen
Wie bereits erwähnt, wird der Daemon für die Richtlinie zur Stromversorgung von Autos auf der Systemebene ausgeführt, Richtlinienverwaltung, bietet fast dieselben Funktionen wie CPMS, die auf Framework-Ebene ausgeführt werden. Nehmen wir außerdem an, dass der Daemon der Richtlinie zur Energieversorgung und der CPMS vollständig synchronisiert sind.
Der Richtlinien-Daemon zur Stromversorgung von Autos 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: Wann jedes Element geändert werden muss, Energiestatus ändern.
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 zum Aktivieren der Energierichtlinienverwaltung:
- Aktuelle Energierichtlinie abrufen
- Neue Energierichtlinie anwenden
- Neue Energierichtliniengruppe festlegen
Nur Module mit Systemberechtigungen können die Methoden verwenden. Module, die in der Tabelle
werden informiert, wenn eine Energierichtlinie angewendet wird, kann einen Listener für Energierichtlinienänderung auf
CarPowerManager