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'activation et de désactivation attendus pour les composants matériels et logiciels. Le VHAL ou les services fournisseurs privilégiés du système peuvent appliquer une nouvelle stratégie d'alimentation lorsque l'état d'alimentation d'Android change ou lorsque les conditions qu'ils attendent sont remplies.
L'application d'une règle d'alimentation est autorisée dans les états "Wait for VHAL", "On" et "Pre Shutdown Prepare" (parfois avec certaines restrictions). Contrairement à "Wait for VHAL" et "On", une règle d'alimentation par défaut ne peut pas être configurée pour "Pre Shutdown Prepare" dans un groupe de règles d'alimentation. Dans la phase de préparation à l'arrêt du cœur, 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 règle d'alimentation normale ne puisse pas être appliquée, une règle d'alimentation spéciale, qui est la règle d'alimentation système nommée no user interaction (aucune interaction utilisateur), est appliquée lors de la phase de préparation à l'arrêt du cœur.
État de l'alimentation AAOS
Les appareils AAOS suivent ce schéma d'état de l'alimentation :

Figure 1. Diagramme d'état de l'alimentation AAOS.
Chaque état d'alimentation est décrit ci-dessous :
| Valeur | Description |
|---|---|
| Désactivé |
|
| Attendre VHAL |
|
| Activé |
|
| Préparation de l'arrêt |
|
| Attendre la fin de VHAL |
|
| Suspendre vers la RAM (STR) |
|
| Suspend-to-disk (STD) |
|
Comment la stratégie d'alimentation est-elle définie ?
Les implémenteurs définissent les règles d'alimentation dans /vendor/etc/automotive/power_policy.xml, qui :
- Définit la stratégie d'alimentation.
- Définit les groupes de règles d'alimentation, qui incluent la règle 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ègles relatives à l'alimentation
La stratégie d'alimentation se compose d'un ensemble d'états d'alimentation attendus des composants matériels et logiciels. AAOS accepte les composants suivants dans la stratégie d'alimentation :
|
AUDIO MEDIA DISPLAY BLUETOOTH |
WIFI CELLULAR 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 règles d'alimentation. Définissez 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 sur l'alimentation
Le groupe de règles d'alimentation spécifie la règle d'alimentation par défaut à appliquer automatiquement lors des transitions d'état d'alimentation. Les fournisseurs peuvent définir la règle d'alimentation par défaut pour "Wait for VHAL" (Attendre VHAL) et "On" (Activé).
Règles d'alimentation du système
AAOS est compatible avec deux règles d'alimentation système : no user interaction (aucune interaction utilisateur) et suspend prep (préparation de la suspension). La règle d'alimentation du système est appliquée lorsque l'appareil passe en mode silencieux, en mode garage, en mode veille avec mise en veille de la RAM ou en mode veille avec mise en veille sur le disque.
Les tableaux suivants listent le comportement de chaque composant dans la stratégie d'alimentation du système.
Les implémenteurs peuvent remplacer la détection Bluetooth, NFC et des appareils vérifiés dans la règle d'alimentation système sans interaction utilisateur. Les remplacements sont appliqués dans /vendor/etc/automotive/power_policy.xml.
aucune interaction de l'utilisateur
Le comportement de la stratégie d'alimentation système no user interaction (aucune interaction utilisateur) est défini dans le tableau suivant :
| Composants | État de l'alimentation | Configurable |
|---|---|---|
| Audio | Désactivé | Non |
| Multimédia | Désactivé | Non |
| Écran | Désactivé | Non |
| Bluetooth | Désactivé | Oui |
| Wi-Fi | Activé | Non |
| Mobile | 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 approuvés pour la connexion des utilisateurs | Activé | Oui |
| Emplacement | Désactivé | Non |
| Micro | Désactivé | Non |
| Processeur | Activé | Non |
suspendre la préparation
Le comportement de la règle d'alimentation système suspend prep est défini dans le tableau suivant :
| Composants | État de l'alimentation | Configurable par l'OEM |
|---|---|---|
| Audio | Désactivé | Non |
| Multimédia | N/A | Non |
| Écran | N/A | Non |
| Bluetooth | Désactivé | Non |
| Wi-Fi | Désactivé | Non |
| Mobile | 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 approuvés pour la connexion des utilisateurs | N/A | Non |
| Emplacement | Désactivé | Non |
| Micro | Désactivé | Non |
| Processeur | Désactivé | Non |
Interaction avec le VHAL
Le démon de la stratégie d'alimentation de la voiture s'exécutant 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 la stratégie d'alimentation dans cette propriété.POWER_POLICY_GROUP_REQVHAL écrit l'ID du groupe de règles 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 démon de la politique d'alimentation de la voiture met à jour la propriété CURRENT_POWER_POLICY pour notifier le changement au VHAL.
Interaction avec les processus natifs
Le CarPowerManagementService (CPMS) délègue la gestion des règles d'alimentation au daemon de règles d'alimentation du véhicule. Le daemon est la source unique de vérité pour les règles d'alimentation du système. Le daemon de la stratégie d'alimentation de la voiture gère l'état de la stratégie d'alimentation et informe le CPMS, le VHAL et d'autres clients natifs des modifications.
Le démon de la politique d'alimentation de la voiture exporte les interfaces AIDL pour une utilisation 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 changer d'é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 stratégie d'alimentation actuelle
- Appliquer une nouvelle stratégie d'alimentation
- Définir un nouveau groupe de règles d'alimentation
Seuls les modules disposant de privilèges système peuvent utiliser les méthodes. Les modules qui souhaitent être informés de l'application d'une règle d'alimentation peuvent enregistrer un écouteur de modification de règle d'alimentation sur CarPowerManager.