Para garantir que os componentes de hardware e software (como tela, áudio e interação por voz) sejam ativados e desativados seletivamente conforme necessário, o AAOS fornece uma política de energia, que consiste em um conjunto de estados esperados de ativação e desativação para componentes de hardware e software. A VHAL ou serviços do fornecedor com privilégios do sistema podem aplicar uma nova política de energia quando o estado de energia do Android é alterado ou quando as condições esperadas são atendidas.
É permitido aplicar uma política de energia nos estados "Wait for VHAL", "On" e "Pre Shutdown Prepare" (às vezes com algumas restrições). Ao contrário de "Aguardar VHAL" e "Ligado", uma política de energia padrão não pode ser configurada para "Preparação antes do desligamento" em um grupo de políticas de energia. Na fase principal de preparação para desligamento, o modo garagem está em execução e não deve ser afetado por uma mudança no estado de energia. Embora não seja possível aplicar uma política de energia comum, uma política especial, que é a política de energia do sistema chamada sem interação do usuário, é aplicada na fase principal de preparação para desligamento.
Estado de energia do AAOS
Os dispositivos AAOS seguem este diagrama de estado de energia:

Figura 1. Diagrama de estado de energia do AAOS.
Cada estado de energia é descrito abaixo:
| Valor | Descrição |
|---|---|
| Desativado |
|
| Aguardar VHAL |
|
| Ativado |
|
| Preparação para desligamento |
|
| Aguarde a conclusão do VHAL |
|
| Suspender para RAM (STR) |
|
| Suspender para disco (STD) |
|
Como a política de energia é definida?
Os implementadores definem políticas de energia em /vendor/etc/automotive/power_policy.xml, que:
- Define a política de energia.
- Define grupos de políticas de energia, que incluem a política de energia padrão e são aplicados automaticamente quando ocorrem transições de estado de energia.
- Substitui a política de energia do sistema.
Política de energia
A política de energia consiste em um conjunto de estados de energia esperados de componentes de hardware e software. O AAOS oferece suporte a estes componentes na política de energia:
|
ÁUDIO MÍDIA TELA BLUETOOTH |
WIFI CELLULAR ETHERNET PROJECTION |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
Os fornecedores também podem definir componentes de energia personalizados para uso com políticas de energia. Defina componentes de energia personalizados no mesmo arquivo XML das políticas de energia, como neste exemplo:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Grupo de políticas de energia
O grupo de políticas de energia especifica a política padrão a ser aplicada automaticamente nas transições de estado de energia. Os fornecedores podem definir a política de energia padrão para Wait for VHAL e On.
Políticas de energia do sistema
O AAOS oferece suporte a duas políticas de energia do sistema: sem interação do usuário e preparação para suspensão. A política de energia do sistema é aplicada quando o dispositivo entra no modo silencioso, no modo garagem, em suspensão para RAM ou em suspensão para disco.
As tabelas a seguir listam o comportamento de cada componente na política de energia do sistema.
Os implementadores podem substituir a detecção de Bluetooth, NFC e dispositivo de confiança na política de energia do sistema sem interação do usuário. As substituições são aplicadas em
/vendor/etc/automotive/power_policy.xml.
sem interação do usuário
O comportamento da política de energia do sistema sem interação do usuário é definido nesta tabela:
| Componentes | Estado de potência | Configurável |
|---|---|---|
| Áudio | Desativado | Não |
| Mídia | Desativado | Não |
| Display | Desativado | Não |
| Bluetooth | Desativado | Sim |
| Wi-Fi | Ativado | Não |
| Rede celular | Ativado | Não |
| Ethernet | Ativado | Não |
| Projeção | Desativado | Não |
| NFC | Desativado | Sim |
| Entrada | Desativado | Não |
| Assistente | Desativado | Não |
| Interação do usuário | Desativado | Não |
| Detecção de dispositivos confiáveis para login do usuário | Ativado | Sim |
| Local | Desativado | Não |
| Microfone | Desativado | Não |
| CPU | Ativado | Não |
suspender prep
O comportamento da política de energia do sistema preparação para suspensão está definido nesta tabela:
| Componentes | Estado de energia | Configurável pelo OEM |
|---|---|---|
| Áudio | Desativado | Não |
| Mídia | N/A | Não |
| Display | N/A | Não |
| Bluetooth | Desativado | Não |
| Wi-Fi | Desativado | Não |
| Rede celular | N/A | Não |
| Ethernet | N/A | Não |
| Projeção | N/A | Não |
| NFC | N/A | Não |
| Entrada | N/A | Não |
| Assistente | N/A | Não |
| Interação do usuário | N/A | Não |
| Detecção de dispositivos confiáveis para login do usuário | N/A | Não |
| Local | Desativado | Não |
| Microfone | Desativado | Não |
| CPU | Desativado | Não |
Interação com a VHAL
O daemon da política de energia do carro em execução na camada do sistema assina duas propriedades para ouvir solicitações da VHAL:
POWER_POLICY_REQa VHAL grava o ID da política de energia nessa propriedade.POWER_POLICY_GROUP_REQo VHAL grava o ID do grupo de políticas de energia nesta propriedade.
A política de energia atual no sistema pode ser alterada por módulos diferentes da VHAL. Nesse caso,
o daemon da política de energia do carro atualiza a propriedade CURRENT_POWER_POLICY para notificar a
mudança para o VHAL.
Interação com processos nativos
O CarPowerManagementService (CPMS) delega o gerenciamento de políticas de energia ao daemon de políticas de energia do carro. O daemon é a única fonte de verdade para políticas de energia no sistema. O daemon de política de energia do carro gerencia o estado da política de energia e notifica o CPMS, a VHAL e outros clientes nativos sobre as mudanças.
O daemon de política de energia do carro exporta interfaces AIDL para uso por HALs e outros processos nativos. Eles podem receber uma notificação quando uma nova política de energia for alterada. Em outras palavras, quando cada um precisa mudar o 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.
* @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);
}
Interação com módulos Java
O CarPowerManager fornece métodos para ativar o gerenciamento de políticas de energia:
- Acessar a política de energia atual
- Aplicar uma nova política de energia
- Definir um novo grupo de políticas de energia
Somente módulos com privilégios de sistema podem usar os métodos. Os módulos que querem ser
informados quando uma política de energia é aplicada podem registrar um listener de mudança de política de energia em
CarPowerManager