Richtlinie zu Stromversorgung

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:

AAOS-Betriebszustandsdiagramm

Abbildung 1. AAOS-Energiezustandsdiagramm.

Die einzelnen Stromversorgungsstatus werden nachfolgend beschrieben:

Wert Beschreibung
Aus
  • Der Anwendungsprozessor (AP), der Arbeitsspeicher und die Peripheriegeräte werden nicht mit Strom versorgt.
Auf VHAL warten
  • Wenn der Fahrer mit dem Fahrzeug interagiert (z. B. eine Tür öffnet), versorgt die VMCU den AP, den Speicher und die Peripheriegeräte mit Strom.
  • AAOS wechselt von einem von drei Zuständen (Aus, Suspend-to-RAM (STR, Wait for VHAL to finish)) und wechselt dann in den Zustand „Wait for VHAL“, in dem es auf die Koordination mit dem VHAL wartet.
An
  • Das VHAL weist AAOS an, den Status „Ein“ zu aktivieren. In diesem Zustand ist AAOS vollständig aktiv und interagiert mit dem Fahrer.
  • Die Anzeige wird durch die Stromrichtlinie gesteuert und nicht durch die Android-Anzeige-Ein/Aus-Aufrufe für andere Formfaktoren.
Vorbereitung auf die Einstellung
  • Wenn der Fahrer nicht mehr fährt, weist das VHAL AAOS an, in den Shutdown-Vorbereitungsmodus zu wechseln. Dieser beginnt mit der Phase „Pre Shutdown Prepare“ (Vorbereitung auf das Herunterfahren), gefolgt von der Phase „Core Shutdown Prepare“ (Kern-Herunterfahren). In der Kernphase sind Display und Audio aus und AAOS interagiert nicht mit dem Fahrer. Das Android-System wird weiterhin ausgeführt und kann Apps und das Android-System aktualisieren. Wenn alle Updates abgeschlossen sind, wechselt das Android-System in den Status „Wait for VHAL Finish“.
Warten, bis VHAL abgeschlossen ist
  • AAOS informiert die VHAL, dass sie heruntergefahren werden kann. Die VMCU (Vehicle Microcontroller Unit) soll das SoC (System-on-Chip) in den Tiefschlafmodus versetzen und die Stromversorgung des AP (Application Processor) unterbrechen. AAOS befindet sich dann im STR-Status, obwohl kein Code ausgeführt wird.
  • Wenn VHAL nicht abgeschlossen wird und der Fahrer zurückkehrt, sollte das Infotainmentsystem (HU) direkt zu „Wait for VHAL“ (Auf VHAL warten) wechseln.
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.
Suspend-to-Disk (STD)
  • Das Fahrzeug und der AP sind ausgeschaltet, es wird kein Code ausgeführt und die Verarbeitungseinheit und der AP-RAM werden nicht mit Strom versorgt.

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_REQ schreibt die VHAL die ID der Stromrichtlinie in diese Eigenschaft.
  • POWER_POLICY_GROUP_REQ Die 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.