Politique d'alimentation

Pour garantir que les composants matériels et logiciels (tels que l'affichage, l'audio et l'interaction vocale) sont activés et désactivés de manière sélective selon les besoins, AAOS fournit une politique d'alimentation qui consiste en un ensemble d'états de mise sous et hors tension attendus pour les composants matériels et logiciels. . VHAL, ou services de fournisseur privilégiés par le système, peut appliquer une nouvelle politique d'alimentation lorsque l'état d'alimentation d'Android change ou lorsque les conditions qu'ils attendent sont remplies.

L’application d’une stratégie d’alimentation est autorisée dans les états Wait for VHAL et On. Dans la préparation à l'arrêt, le mode garage est en cours d'exécution et ne devrait pas être perturbé par un changement d'état d'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 nommée « aucune interaction avec l'utilisateur », est appliquée dans la préparation à l'arrêt.

État d'alimentation AAOS

Les appareils AAOS suivent ce diagramme d'état d'alimentation :

Diagramme d'état d'alimentation AAOS

Figure 1. Diagramme d'état d'alimentation AAOS

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

Valeur Description
Désactivé Aucune alimentation n'est physiquement fournie au processeur d'application (AP), à la mémoire et aux périphériques.
Attendez VHAL
  • Lorsque le conducteur interagit avec le véhicule (par exemple, en ouvrant une porte), le VMCU alimente la mémoire du point d'accès. et périphériques.
  • AAOS passe de l'un des trois états (Off, Suspend-to-RAM (STR, Wait for VHAL Finish), puis entre en Wait for VHAL, où il attend la coordination avec le VHAL.
Sur
  • Le VHAL demande à l'AAOS d'entrer dans l'état On. Dans cet état, AAOS fonctionne pleinement et interagit avec le pilote.
  • L'affichage est contrôlé par la politique d'alimentation et non par les appels On/Off de l'affichage Android pour d'autres facteurs de forme.
Préparation à l'arrêt
  • Lorsque le conducteur a arrêté de conduire, le VHAL demande à l'AAOS d'entrer dans la préparation à l'arrêt. Dans cet état, l'affichage et le son sont désactivés et l'AAOS n'interagit pas avec le conducteur. Le système Android fonctionne toujours et peut mettre à jour les applications et le système Android. Lorsque les mises à jour (le cas échéant) sont terminées, le système Android entre dans Attendre la fin de VHAL.
Attendez que VHAL termine
  • AAOS informe le VHAL qu'il peut être arrêté. L'unité de microcontrôleur du véhicule (VMCU) devrait placer le système sur puce (SoC) en veille profonde et couper l'alimentation du point d'accès. AAOS est alors dans l'état STR, bien qu'aucun code ne soit exécuté.
  • Si VHAL ne se termine pas et que le conducteur revient, l'unité principale (HU) doit passer directement à Attendre VHAL.
Suspension vers la RAM (STR) Le véhicule et l'AP sont éteints, aucun code n'est exécuté et la RAM de l'AP est maintenue sous tension.

Architecture logicielle

L'architecture de la politique d'alimentation est illustrée ci-dessous et définie dans la section suivante :

Figure 2. Architecture de la politique d'alimentation

Comment se définit la politique du pouvoir ?

Les responsables de la mise en œuvre définissent des politiques d'alimentation dans /vendor/etc/automotive/power_policy.xml , qui :

  • Définit la politique d’alimentation.
  • Définit les groupes de stratégies d'alimentation, qui incluent la stratégie d'alimentation par défaut et sont automatiquement appliqués lorsque des transitions d'état d'alimentation se produisent.
  • Remplacez la stratégie d’alimentation du système.

Politique de pouvoir

La politique d’alimentation est un ensemble d’états d’alimentation attendus des composants matériels et logiciels. AAOS prend en charge les composants suivants dans la stratégie d'alimentation :

  • 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

Groupe de stratégies d'alimentation

La stratégie d'alimentation par défaut est automatiquement appliquée lorsque la transition d'état d'alimentation est 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, On et Wait for VHAL Finish (Deep Sleep Entry ou Shutdown Start).

Politique d'alimentation du système

AAOS ne prend en charge qu'une seule politique d'alimentation système, à savoir « aucune interaction avec l'utilisateur ». La stratégie d'alimentation du système est appliquée lorsque l'appareil passe en mode Garage.

Le comportement de chaque composant de la stratégie d'alimentation du système est répertorié dans le tableau ci-dessous. Les développeurs peuvent ignorer la détection des appareils Bluetooth, NFC et de confiance dans la stratégie d’alimentation du système. Les remplacements sont appliqués dans /vendor/etc/power_policy.xml .

Composants État de puissance Configurable
l'audio Désactivé Non
Médias Désactivé Non
Affichage principal Désactivé Non
Afficher le cluster Désactivé Non
Afficher passager avant Désactivé Non
Affichage passager arrière Désactivé Non
Bluetooth Désactivé OUI
Wifi SUR Non
Cellulaire SUR Non
Ethernet SUR Non
Projection Désactivé Non
NFC Désactivé OUI
Saisir Désactivé Non
Interaction vocale Désactivé Non
Interaction visuelle Désactivé Non
Détection des appareils de confiance SUR OUI
Emplacement Désactivé Non
Microphone Désactivé Non
CPU Sur Non

Interaction avec le VHAL

Le démon de politique d'alimentation de la voiture exécuté dans la couche système souscrit à deux propriétés pour écouter les requêtes du VHAL :

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

La politique d'alimentation actuelle du système peut être modifiée par des modules autres que VHAL. Dans ce cas, le démon de politique d'alimentation du véhicule met à jour la propriété CURRENT_POWER_POLICY pour notifier la modification apportée au VHAL.

Interaction avec les processus natifs

Comme mentionné ci-dessus, le démon de politique d'alimentation du véhicule s'exécute dans la couche système et, en termes de gestion de la politique d'alimentation, fournit presque les mêmes fonctionnalités que le CPMS exécuté dans la couche cadre. Supposons également que le démon de politique d’alimentation du véhicule et le CPMS soient entièrement synchronisés.

Le démon de politique d'alimentation automobile exporte les interfaces AIDL pour les utiliser par les HAL et d'autres processus natifs. Ils peuvent être avertis lorsqu'une nouvelle politique d'alimentation est modifiée. Autrement dit, lorsque chacun doit changer son état de puissance.

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

Interaction avec les modules Java

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

  • Obtenez la politique d'alimentation actuelle.
  • Obtenir le groupe de stratégies d'alimentation actuel
  • Appliquer une nouvelle politique d'alimentation
  • Définir un nouveau groupe de stratégies d'alimentation

Seuls les modules privilégiés par le système peuvent utiliser les méthodes. Les modules qui souhaitent être informés lorsqu'une politique d'alimentation est appliquée peuvent enregistrer un écouteur de changement de politique d'alimentation sur CarPowerManager .