Para garantir que os componentes de hardware e software (como exibição, áudio e interação de voz) sejam ativados e desativados seletivamente conforme necessário, o AAOS fornece uma política de energia, que consiste em um conjunto de estados de ativação e desativação esperados para componentes de hardware e software . VHAL, ou serviços de fornecedores com privilégios de sistema, podem aplicar uma nova política de energia quando o estado de energia do Android muda ou quando as condições que estão esperando são atendidas.
A aplicação de uma política de energia é permitida nos estados Wait for VHAL e On. Em Preparação para desligamento, o Modo Garagem está em execução e não deve ser perturbado por uma mudança no estado de energia. Embora uma política de energia regular não possa ser aplicada, uma política de energia especial , que é a política de energia do sistema denominada “sem interação do usuário”, é aplicada em Preparação para desligamento.
Estado de energia AAOS
Os dispositivos AAOS seguem este diagrama de estado de energia:

Figura 1. Diagrama de estado de energia AAOS
Cada estado de energia é descrito abaixo:
| Valor | Descrição |
|---|---|
| Desligado | Nenhuma energia é fornecida fisicamente ao processador de aplicativos (AP), memória e periféricos. |
| Aguarde VHAL |
|
| Sobre |
|
| Preparação de desligamento |
|
| Aguarde o término do VHAL |
|
| Suspender para RAM (STR) | O veículo e o AP estão desligados, nenhum código está sendo executado e a alimentação é mantida na RAM do AP. |
Arquitetura de software
A arquitetura da política de energia é ilustrada abaixo e definida na seção a seguir:

Figura 2. Arquitetura de política de energia
Como é definida a política de poder?
Os implementadores definem as políticas de energia em /vendor/etc/automotive/power_policy.xml , que:
- Define a política de energia.
- Define grupos de política de energia, que incluem a política de energia padrão e são aplicados automaticamente quando ocorrem transições de estado de energia.
- Substitua a política de energia do sistema.
Política de energia
A política de energia é um conjunto de estados de energia esperados de componentes de hardware e software. AAOS suporta os seguintes componentes na política de energia:
-
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
Grupo de política de energia
A política de energia padrão é aplicada automaticamente na transição do estado de energia especificada no grupo de políticas de energia. Os fornecedores podem definir a política de energia padrão para Wait For VHAL, On e Wait for VHAL Finish (entrada de suspensão profunda ou início de desligamento).
Política de energia do sistema
O AAOS suporta apenas uma política de energia do sistema, que é “sem interação do usuário”. A política de energia do sistema é aplicada quando o dispositivo entra no modo silencioso ou no modo garagem.
O comportamento de cada componente na política de energia do sistema está listado na tabela abaixo. Os implementadores podem substituir Bluetooth, NFC e detecção de dispositivo confiável na política de energia do sistema. As substituições são aplicadas em /vendor/etc/power_policy.xml .
| Componentes | Estado de energia | Configurável |
|---|---|---|
| Áudio | Desligado | Não |
| meios de comunicação | Desligado | Não |
| Exibir principal | Desligado | Não |
| Cluster de exibição | Desligado | Não |
| Exibição do passageiro dianteiro | Desligado | Não |
| Exibir passageiro traseiro | Desligado | Não |
| Bluetooth | Desligado | SIM |
| Wi-fi | SOBRE | Não |
| Celular | SOBRE | Não |
| Ethernet | SOBRE | Não |
| Projeção | Desligado | Não |
| NFC | Desligado | SIM |
| Entrada | Desligado | Não |
| Interação de voz | Desligado | Não |
| Interação visual | Desligado | Não |
| Detecção de dispositivo confiável | SOBRE | SIM |
| Localização | Desligado | Não |
| Microfone | Desligado | Não |
| CPU | Sobre | Não |
Interação com o VHAL
O daemon de política de energia do carro em execução na camada do sistema assina duas propriedades para ouvir solicitações do VHAL:
-
POWER_POLICY_REQ, o VHAL grava o ID da política de energia nessa propriedade. -
POWER_POLICY_GROUP_REQ, o VHAL grava o ID do grupo de política de energia nessa propriedade.
A política de energia atual no sistema pode ser alterada por outros módulos além do VHAL. Nesse caso, o daemon de política de energia do carro atualiza a propriedade CURRENT_POWER_POLICY para notificar a alteração no VHAL.
Interação com processos nativos
Como mencionado acima, o daemon de política de energia do carro é executado na camada de sistema e, em termos de gerenciamento de política de energia, fornece quase a mesma funcionalidade que o CPMS executado na camada de estrutura. Além disso, suponha que o daemon de política de energia do carro e o CPMS estejam totalmente sincronizados.
O daemon de política de energia do carro exporta interfaces AIDL para uso por HALs e outros processos nativos. Eles podem ser notificados quando uma nova política de energia é alterada. Em outras palavras, quando cada um deve mudar seu estado de energia.
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);
}
Interação com módulos Java
CarPowerManager fornece métodos para habilitar o gerenciamento de política de energia:
- Obtenha a política de energia atual.
- Obtenha o grupo de políticas de energia atual
- Aplicar uma nova política de energia
- Definir um novo grupo de políticas de energia
Apenas módulos com privilégios de sistema podem usar os métodos. Módulos que desejam ser informados quando uma política de energia é aplicada, podem registrar um listener de mudança de política de energia no CarPowerManager .