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, a 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. . VHAL, ou serviços de fornecedores com privilégios de sistema, podem aplicar uma nova política de energia quando as transições do estado de energia do Android ou quando as condições pelas quais eles estão aguardando forem atendidas.
A aplicação de uma política de energia é permitida nos estados Wait for VHAL e On. Em Shutdown Prepare, 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 chamada “sem interação do usuário”, é aplicada no Shutdown Prepare.
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 aos periféricos. |
Aguarde VHAL |
|
Sobre |
|
Preparação para 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 energia é mantida na RAM do AP. |
Arquitetura de software
A arquitetura da política energética é ilustrada abaixo e definida na seção seguinte:
Figura 2. Arquitetura da política energética
Como é definida a política de energia?
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.
- Substitua a política de energia do sistema.
Política de energia
A política de energia é um conjunto de estados de energia esperados dos componentes de hardware e software. AAOS oferece suporte aos 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íticas de energia
A política de energia padrão é aplicada automaticamente na transição do estado de energia e é 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 (Deep Sleep Entry ou Shutdown Start).
Política de energia do sistema
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 Garagem.
O comportamento de cada componente na política de energia do sistema está listado na tabela abaixo. Os implementadores podem substituir a detecção de Bluetooth, NFC e dispositivos confiáveis 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 |
Exibir 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 por 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 inscreve duas propriedades para escutar solicitações do VHAL:
-
POWER_POLICY_REQ
, o VHAL grava o ID da política de energia nesta propriedade. -
POWER_POLICY_GROUP_REQ
, o 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 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
Conforme mencionado acima, o daemon da política de energia do carro é executado na camada do sistema e, em termos de gerenciamento da política de energia, fornece quase a mesma funcionalidade que o CPMS executado na camada da estrutura. Além disso, suponha que o daemon da 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 for 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 permitir o gerenciamento de políticas 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
Somente módulos com privilégios de sistema podem usar os métodos. Os módulos que desejam ser informados quando uma política de energia é aplicada podem registrar um ouvinte de mudança de política de energia no CarPowerManager
.