Règle d'alimentation

Pour s'assurer 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 façon sélective selon les besoins, AAOS fournit une politique d'alimentation, qui se compose d'un l'ensemble des états d'allumage et d'arrêt attendus pour les composants matériels et logiciels. VHAL ou de fournisseurs privilégiés du système, peuvent appliquer une nouvelle stratégie d'alimentation lorsque l'état d'alimentation d'Android transitions ou lorsque les conditions qu'elles attendent sont remplies.

L'application d'une règle d'alimentation est autorisée dans les états "Attendre le VHAL" et Activée (parfois avec des restrictions). Lorsque vous préparez l'arrêt, le mode garage fonctionne ne pas être dérangé par un changement de l'état de l'alimentation. Bien qu'une politique d'alimentation normale ne puisse pas être appliquée, une une règle d'alimentation spéciale, qui est la règle d'alimentation du système appelée « Aucune interaction de l'utilisateur », est appliquée dans Préparez-vous à l'arrêt.

État de l'alimentation AAOS

Les appareils AAOS suivent ce schéma d'état d'alimentation:

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

Figure 1 : Schéma de l'état de l'alimentation 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 périphériques.
Attendre VHAL
  • Lorsque le conducteur interagit avec le véhicule (par exemple, en ouvrant une porte), la VMCU s'applique l'alimentation du point d'accès, la mémoire. et périphériques.
  • Passage d'AAOS à l'un des trois états suivants (désactivé, suspendre vers la RAM, STR, attendre la fin du VHAL) puis entre "Attendre le VHAL", où il attend la coordination avec le VHAL.
Activé
  • Le VHAL indique à AAOS de passer à l'état "Activé". Dans cet état, AAOS est entièrement en cours d'exécution et d’interagir avec le conducteur.
  • L'affichage est contrôlé par la règle d'alimentation et non par les appels d'activation/de désactivation de l'écran Android facteurs de forme.
Préparation à l'arrêt
  • Lorsque le conducteur a arrêté de conduire, le VHAL demande à AAOS d'accéder à la préparation de l'arrêt. Dans cet état, l'écran et le son sont désactivés, et l'AAOS n'interagit pas avec 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 à "Attendre la fin de l'opération VHAL".
Attendre la fin du VHAL
  • AAOS informe le VHAL qu'il peut être arrêté. Le microcontrôleur du véhicule (VMCU) est placer le système sur puce (SoC) en veille profonde et couper l'alimentation du point d'accès. AAOS est alors à l'état STR, bien qu'aucun code ne soit exécuté.
  • Si le VHAL ne se termine pas et que le pilote revient, l'unité principale (HU) doit passer directement "Attendre VHAL".
Suspendre sur la RAM (STR)
  • Le véhicule et le point d'accès sont éteints, aucun code n'est exécuté, et l'alimentation est maintenue à la RAM du point d'accès.
Suspendre sur le disque (STD)
  • Le véhicule et le point d'accès sont éteints, aucun code n'est exécuté et aucun alimentation n'est maintenu à l'unité de traitement et à la RAM du point d'accès.

Comment la politique d'alimentation est-elle définie ?

Les implémentations définissent des règles d'alimentation dans /vendor/etc/automotive/power_policy.xml, qui:

  • Définit la règle d'alimentation.
  • Définit les groupes de règles d'alimentation, qui incluent la règle d'alimentation par défaut et qui sont automatiquement appliquée lors des transitions d'état d'alimentation.
  • Ceci remplace la règle d'alimentation du système.

Règle d'alimentation

La règle d'alimentation comprend un ensemble d'états d'alimentation attendus des composants matériels et logiciels. AAOS prend en charge les composants suivants dans la règle d'alimentation:

AUDIO
MULTIMÉDIA
AFFICHAGE
BLUETOOTH
Wi-Fi
CELLULAIRE
ETHERNET
PROJECTION
NFC
ENTRÉE
INTERACTION_VOCALE
INTERACTION_VISUELLE
Trusted_DEVICE_DETECTION
POSITION
MICRO
Processeur

Les fournisseurs peuvent également définir leurs propres composants d'alimentation personnalisés à utiliser avec les règles d'alimentation. Définir des composants d'alimentation personnalisés dans le même fichier XML que les règles 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 règle d'alimentation par défaut est automatiquement appliquée lors de la transition de l'état de l'alimentation spécifié dans le groupe de règles d'alimentation. Les fournisseurs peuvent définir la politique d'alimentation par défaut Attendez que VHAL, Activé, puis Attendez la fin de l'opération VHAL (entrée en veille profonde ou démarrage de l'arrêt).

Règles d'alimentation du système

AAOS est compatible avec deux règles d'alimentation du système : aucune interaction de l'utilisateur suspendre la préparation. La règle d'alimentation du système est appliquée lorsque l'appareil passe les modes silencieux, garage, Suspendre sur la RAM ou Suspendre sur le disque.

Les tableaux suivants répertorient le comportement de chaque composant de la règle d'alimentation du système. Les responsables de la mise en œuvre peuvent ignorer le Bluetooth, le NFC et la détection des appareils vérifiés dans le aucune interaction de l'utilisateur. Les remplacements sont appliqués dans /vendor/etc/power_policy.xml

aucune interaction avec l'utilisateur

Le comportement de la règle d'alimentation du système aucune interaction de l'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 des appareils de confiance pour la connexion des utilisateurs Activé Oui
Position Désactivé Non
Micro Désactivé Non
Processeur Activé Non

préparation de la suspension

Le comportement de la règle d'alimentation du système suspend prep est défini dans le tableau suivant:

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 des appareils de confiance 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 règle d'alimentation de la voiture exécuté dans la couche système s'abonne à deux propriétés pour écouter à partir du VHAL:

  • POWER_POLICY_REQ : le VHAL écrit l'ID de la règle d'alimentation dans cette propriété.
  • POWER_POLICY_GROUP_REQ : le VHAL écrit l'ID du groupe de règles d'alimentation. à cette propriété.

La règle d'alimentation actuelle du système peut être modifiée par des modules autres que VHAL. Dans ce cas, le daemon de règle d'alimentation de la voiture met à jour la propriété CURRENT_POWER_POLICY pour avertir le passer au VHAL.

Interaction avec les processus natifs

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

Le daemon de règles d'alimentation de la voiture exporte les interfaces AIDL pour les utiliser par les HAL et d'autres processus natifs. Ils peuvent recevoir une notification lorsqu'une nouvelle règle d'alimentation est modifiée. En d’autres termes, lorsque chacun doit changer 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 règles d'alimentation:

  • Obtenir la politique d'alimentation actuelle
  • Appliquer une nouvelle règle d'alimentation
  • Définir un nouveau groupe de règles d'alimentation

Seuls les modules privilégiés du système peuvent utiliser ces méthodes. Modules qui veulent être lorsqu'une règle d'alimentation est appliquée peut enregistrer un écouteur de modification de règle d'alimentation pour CarPowerManager