Para garantizar que los componentes de hardware y software (como la pantalla, el audio y la interacción por voz) se activen y desactiven de forma selectiva según sea necesario, AAOS proporciona una política de energía, que consiste en un conjunto de estados de encendido y apagado esperados para los componentes de hardware y software. El VHAL o los servicios del proveedor con privilegios del sistema pueden aplicar una nueva política de energía cuando el estado de energía de Android cambia o cuando se cumplen las condiciones que esperan.
Se permite aplicar una política de energía en los estados Wait for VHAL y On (a veces con algunas restricciones). En Shutdown Prepare, el modo garaje está en ejecución y no debe verse afectado por un cambio en el estado de energía. Si bien no se puede aplicar una política de energía normal, en Shutdown Prepare se aplica una política de energía especial, que es la política de energía del sistema denominada no user interaction.
Estado de energía de AAOS
Los dispositivos AAOS siguen este diagrama de estados de energía:

Figura 1: Diagrama de estado de energía de AAOS.
A continuación, se describe cada estado de energía:
| Valor | Descripción |
|---|---|
| Desactivado |
|
| Espera a VHAL |
|
| Activado |
|
| Preparación para el cierre |
|
| Espera a que finalice VHAL |
|
| Suspender a RAM (STR) |
|
| Suspender en disco (STD) |
|
¿Cómo se define la política de energía?
Los implementadores definen las políticas de energía en /vendor/etc/automotive/power_policy.xml, que hacen lo siguiente:
- Define la política de energía.
- Define grupos de políticas de energía, que incluyen la política de energía predeterminada y se aplican automáticamente cuando se producen transiciones de estado de energía.
- Anula la política de alimentación del sistema.
Política de energía
La política de energía consta de un conjunto de estados de energía esperados de los componentes de hardware y software. AAOS admite estos componentes en la política de energía:
|
AUDIO MEDIOS PANTALLA BLUETOOTH |
WI-FI CELULAR ETHERNET PROYECCIÓN |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
Los proveedores también pueden definir sus propios componentes de energía personalizados para usarlos con las políticas de energía. Define componentes de energía personalizados en el mismo archivo XML que las políticas de energía, como en este ejemplo:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Grupo de políticas de energía
El grupo de políticas de energía especifica la política de energía predeterminada que se aplicará automáticamente en las transiciones de estado de energía. Los proveedores pueden definir la política de energía predeterminada para Wait For VHAL, On y Wait for VHAL Finish (Deep Sleep Entry o Shutdown Start).
Políticas de energía del sistema
AAOS admite dos políticas de energía del sistema: sin interacción del usuario y preparación para la suspensión. La política de energía del sistema se aplica cuando el dispositivo entra en modo silencioso, modo garaje, suspensión a RAM o suspensión a disco.
En las siguientes tablas, se indica el comportamiento de cada componente en la política de energía del sistema.
Los implementadores pueden anular la detección de Bluetooth, NFC y dispositivos de confianza en la política de energía del sistema sin interacción del usuario. Las anulaciones se aplican en /vendor/etc/power_policy.xml.
Sin interacción del usuario
El comportamiento de la política de energía del sistema sin interacción del usuario se define en esta tabla:
| Componentes | Estado de energía | Configurable |
|---|---|---|
| Audio | Desactivado | No |
| Medios | Desactivado | No |
| Pantalla | Desactivado | No |
| Bluetooth | Desactivado | Sí |
| Wi-Fi | Activado | No |
| Móvil | Activado | No |
| Ethernet | Activado | No |
| Proyección | Desactivado | No |
| NFC | Desactivado | Sí |
| Entrada | Desactivado | No |
| Asistente | Desactivado | No |
| Interacción del usuario | Desactivado | No |
| Detección de dispositivos de confianza para el acceso del usuario | Activado | Sí |
| Ubicación | Desactivado | No |
| Micrófono | Desactivado | No |
| CPU | Activado | No |
suspender la preparación
El comportamiento de la política de energía del sistema suspend prep se define en esta tabla:
| Componentes | Estado de energía | Configurable por el OEM |
|---|---|---|
| Audio | Desactivado | No |
| Medios | N/A | No |
| Pantalla | N/A | No |
| Bluetooth | Desactivado | No |
| Wi-Fi | Desactivado | No |
| Móvil | N/A | No |
| Ethernet | N/A | No |
| Proyección | N/A | No |
| NFC | N/A | No |
| Entrada | N/A | No |
| Asistente | N/A | No |
| Interacción del usuario | N/A | No |
| Detección de dispositivos de confianza para el acceso del usuario | N/A | No |
| Ubicación | Desactivado | No |
| Micrófono | Desactivado | No |
| CPU | Desactivado | No |
Interacción con la VHAL
El daemon de la política de energía del automóvil que se ejecuta en la capa del sistema suscribe dos propiedades para escuchar las solicitudes del VHAL:
POWER_POLICY_REQel VHAL escribe el ID de la política de energía en esta propiedad.POWER_POLICY_GROUP_REQel VHAL escribe el ID del grupo de políticas de energía en esta propiedad.
Otros módulos que no son de VHAL pueden cambiar la política de energía actual del sistema. En ese caso, el daemon de la política de energía del automóvil actualiza la propiedad CURRENT_POWER_POLICY para notificar el cambio a la VHAL.
Interacción con procesos nativos
El CarPowerManagementService (CPMS) delega la administración de la política de energía al daemon de política de energía del automóvil. El daemon es la única fuente de información para las políticas de energía del sistema. El daemon de la política de activación de componentes del vehículo administra el estado de la política de activación de componentes del vehículo y notifica los cambios al CPMS, al VHAL y a otros clientes nativos.
El daemon de la política de energía del automóvil exporta interfaces AIDL para que las usen los HAL y otros procesos nativos. Pueden recibir notificaciones cuando se cambia una política de energía nueva. En otras palabras, cuándo debe cambiar cada uno su estado de energía.
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);
}
Interacción con módulos de Java
CarPowerManager proporciona métodos para habilitar la administración de políticas de energía:
- Obtén la política de energía actual
- Cómo aplicar una nueva política de energía
- Cómo establecer un nuevo grupo de políticas de energía
Solo los módulos con privilegios del sistema pueden usar los métodos. Los módulos que deseen recibir información cuando se aplique una política de energía pueden registrar un objeto de escucha de cambios en la política de energía en CarPowerManager.