Règlement sur l'alimentation

Pour s'assurer que les composants matériels et logiciels (tels que l'écran, l'audio et l'interaction vocale) sont activés et désactivés de manière sélective selon les besoins, AAOS fournit une stratégie d'alimentation, qui consiste en un ensemble d'états d'alimentation attendus pour les composants matériels et logiciels. VHAL, ou services de fournisseurs disposant de droits système, peut appliquer une nouvelle stratégie d'alimentation lorsque l'état d'alimentation d'Android passe d'un état à un autre ou lorsque les conditions qu'il attend sont remplies.

L'application d'une stratégie d'alimentation est autorisée dans les états "Attente de VHAL" et "Activé" (parfois avec certaines restrictions). En mode Préparation à l'arrêt, le mode Garage est en cours d'exécution et ne doit pas être perturbé par un changement d'état de l'alimentation. Bien qu'une stratégie d'alimentation standard ne puisse pas être appliquée, une stratégie d'alimentation spéciale, qui est la stratégie d'alimentation du système intitulée "Aucune interaction utilisateur", est appliquée dans la préparation de l'arrêt.

État de l'alimentation de l'AAOS

Les appareils AAOS suivent ce diagramme des états d'alimentation:

Schéma de l'état de l'alimentation AAOS

Figure 1 : Schéma de l'état de la puissance de l'AAOS.

Chaque état d'alimentation est décrit ci-dessous:

Valeur Description
Désactivé
  • Aucune alimentation n'est fournie physiquement au processeur d'application (PA), à la mémoire et aux périphériques.
Attendre VHAL
  • Lorsque le conducteur interagit avec le véhicule (par exemple, en ouvrant une porte), le VMCU alimente l'AP, la mémoire et les périphériques.
  • L'AAOS passe de l'un des trois états (arrêt, suspension dans la RAM (STR, "Wait for VHAL to finish", attendre la fin de VHAL)) à l'état "Wait for VHAL" (Attente de VHAL), où il attend la coordination avec le VHAL.
Activé
  • Le VHAL demande à l'AAOS de passer à l'état "On" (Activé). Dans cet état, AAOS est entièrement en cours d'exécution et interagit avec le pilote.
  • L'écran est contrôlé par la stratégie d'alimentation et non par les appels d'activation/de désactivation de l'écran Android pour d'autres facteurs de forme.
Préparation de l'arrêt
  • Lorsque le conducteur a cessé de conduire, le VHAL demande à l'AAOS de passer en mode Préparation à l'arrêt. Dans cet état, l'écran et l'audio sont désactivés, et l'AAOS n'interagit pas avec le pilote. Le système Android est toujours en cours d'exécution et peut mettre à jour les applications et le système Android. Une fois les mises à jour (le cas échéant) terminées, le système Android passe en mode "Attente de la fin de VHAL".
Attendre la fin de VHAL
  • AAOS informe le VHAL qu'il peut être arrêté. L'unité de microcontrôleur du véhicule (VMCU) doit placer le système sur puce (SoC) en mode veille profonde et couper l'alimentation de l'AP. L'AAOS est alors dans l'état STR, même si aucun code n'est exécuté.
  • Si VHAL ne se termine pas et que le conducteur revient, l'unité principale (HU) doit passer directement à l'état "Attente de VHAL".
Suspendre dans la RAM (STR)
  • Le véhicule et l'AP sont éteints, aucun code n'est exécuté et la RAM de l'AP est alimentée.
Mise en veille sur disque (STD)
  • Le véhicule et l'AP sont éteints, aucun code n'est exécuté et aucune alimentation n'est maintenue sur l'unité de traitement et la RAM de l'AP.

Comment la stratégie d'alimentation est-elle définie ?

Les implémentateurs définissent des stratégies d'alimentation dans /vendor/etc/automotive/power_policy.xml, qui:

  • Définit la stratégie d'alimentation.
  • Définit des groupes de stratégies d'alimentation, qui incluent la stratégie d'alimentation par défaut et sont automatiquement appliqués lors des transitions d'état d'alimentation.
  • Remplace la règle d'alimentation du système.

Règlement sur l'alimentation

La stratégie d'alimentation se compose d'un ensemble d'états d'alimentation attendus des composants matériels et logiciels. AAOS est compatible avec les composants suivants dans la stratégie d'alimentation:

AUDIO
MÉDIA
ÉCRAN
BLUETOOTH
WIFI
CELLULAIRE
ETHERNET
PROJECTION
NFC
INPUT
VOICE_INTERACTION
VISUAL_INTERACTION
TRUSTED_DEVICE_DETECTION
LOCATION
MICROPHONE
CPU

Les fournisseurs peuvent également définir leurs propres composants d'alimentation personnalisés à utiliser avec les stratégies d'alimentation. Définissez des composants d'alimentation personnalisés dans le même fichier XML que les stratégies d'alimentation, comme dans cet exemple:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

Groupe de règles d'alimentation

La stratégie d'alimentation par défaut est automatiquement appliquée lors de la transition d'état d'alimentation spécifiée dans le groupe de stratégies d'alimentation. Les fournisseurs peuvent définir la stratégie d'alimentation par défaut pour "Wait For VHAL" (Attente de VHAL), "On" (Activé) et "Wait for VHAL Finish" (Attente de la fin de VHAL) (entrée en mode veille profonde ou début de l'arrêt).

Règles d'alimentation du système

AAOS est compatible avec deux stratégies d'alimentation système, à savoir aucune interaction utilisateur et préparation de la suspension. La stratégie d'alimentation du système est appliquée lorsque l'appareil passe en mode silencieux, en mode garage, en mode Suspend-to-RAM ou en mode Suspend-to-disk.

Les tableaux suivants indiquent le comportement de chaque composant de la stratégie d'alimentation du système. Les implémentateurs peuvent remplacer la détection du Bluetooth, du NFC et des appareils approuvés dans la stratégie d'alimentation du système sans interaction utilisateur. Les forçages sont appliqués dans /vendor/etc/power_policy.xml.

aucune interaction avec l'utilisateur

Le comportement de la règle d'alimentation système Aucune interaction utilisateur est défini dans ce tableau:

Composants État de l'alimentation Configurable
Audio Désactivé Non
Contenus multimédias Désactivé Non
Écran Désactivé Non
Bluetooth Désactivé Oui
Wi-Fi Activé Non
Connexion cellulaire Activé Non
Ethernet Activé Non
Projection Désactivé Non
NFC Désactivé Oui
Entrée Désactivé Non
Assistant Désactivé Non
Interaction de l'utilisateur Désactivé Non
Détection d'appareils approuvés pour la connexion des utilisateurs Activé Oui
Position Désactivé Non
Micro Désactivé Non
Processeur Activé Non

suspendre la préparation

Le comportement de la stratégie d'alimentation système suspend prep est défini dans ce tableau:

Composants État de l'alimentation Configurable par l'OEM
Audio Désactivé Non
Contenus multimédias N/A Non
Écran N/A Non
Bluetooth Désactivé Non
Wi-Fi Désactivé Non
Connexion cellulaire N/A Non
Ethernet N/A Non
Projection N/A Non
NFC N/A Non
Entrée N/A Non
Assistant N/A Non
Interaction de l'utilisateur N/A Non
Détection d'appareils approuvés pour la connexion des utilisateurs N/A Non
Position Désactivé Non
Micro Désactivé Non
Processeur Désactivé Non

Interaction avec le VHAL

Le daemon de stratégie d'alimentation du véhicule exécuté dans la couche système abonne deux propriétés pour écouter les requêtes du VHAL:

  • POWER_POLICY_REQ : le VHAL écrit l'ID de la stratégie d'alimentation dans cette propriété.
  • POWER_POLICY_GROUP_REQ le VHAL écrit l'ID de groupe de stratégie d'alimentation dans cette propriété.

La stratégie d'alimentation actuelle du système peut être modifiée par des modules autres que VHAL. Dans ce cas, le daemon de la stratégie d'alimentation du véhicule met à jour la propriété CURRENT_POWER_POLICY pour informer le VHAL du changement.

Interaction avec les processus natifs

Comme indiqué ci-dessus, le daemon de gestion de l'alimentation de la voiture s'exécute dans la couche système et, en termes de gestion des règles d'alimentation, offre presque les mêmes fonctionnalités que le CPMS exécuté dans la couche de framework. Supposons également que le daemon de règle d'activation pour la voiture et le CPMS sont entièrement synchronisés.

Le daemon de stratégie d'alimentation de la voiture exporte des interfaces AIDL à utiliser par les HAL et d'autres processus natifs. Ils peuvent être avertis lorsqu'une nouvelle stratégie d'alimentation est modifiée. En d'autres termes, lorsque chacun doit modifier son état d'alimentation.

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);
  }

Interaction avec les modules Java

CarPowerManager fournit des méthodes pour activer la gestion des stratégies d'alimentation:

  • Obtenir la stratégie d'alimentation actuelle
  • Appliquer une nouvelle stratégie d'alimentation
  • Définir un nouveau groupe de stratégies d'alimentation

Seuls les modules disposant de droits système peuvent utiliser les méthodes. Les modules qui souhaitent être informés lorsqu'une stratégie d'alimentation est appliquée peuvent enregistrer un écouteur de modification de stratégie d'alimentation sur CarPowerManager.