Política de energia

Garantir que os componentes de hardware e software (como display, áudio e interação por voz) são ativadas e desativadas seletivamente conforme necessário, o AAOS fornece uma política de energia, que consiste conjunto de estados esperados de ativação e desativação para componentes de hardware e software. VHAL ou serviços do fornecedor com privilégios de sistema, podem aplicar uma nova política de energia quando o estado de energia do Android transições ou quando as condições pelas quais elas estão esperando forem atendidas.

A aplicação de uma política de energia é permitida nos estados Aguardar a VHAL e Ativado (às vezes com algumas restrições). Na preparação para o desligamento, o modo garagem está em execução e deveria não ser perturbado por uma mudança no estado de energia. Embora não seja possível aplicar uma política de energia normal, uma a política de energia especial, que é a política de energia do sistema chamada de nenhuma interação do usuário, é aplicada Preparação de desligamento.

Estado de alimentação do AAOS

Os dispositivos AAOS seguem este diagrama de estado de energia:

Diagrama de estado de energia do AAOS

Figura 1. Diagrama de estado de energia do AAOS.

Cada estado de potência é descrito abaixo:

Valor Descrição
Desativado
  • Nenhuma energia é fornecida fisicamente ao processador do aplicativo (AP), à memória e periféricos.
Aguardar VHAL
  • Quando o motorista interage com o veículo (por exemplo, ao abrir uma porta), a VMCU é aplicada de energia para o AP, a memória. e periféricos.
  • Transições do AAOS de um dos três estados (Desativado, Suspender para RAM (STR, aguardar a conclusão da VHAL)) e entra em "Aguardar a VHAL", onde aguarda a coordenação com a VHAL.
Ativado
  • O VHAL instrui o AAOS a entrar no estado Ativado. Neste estado, o AAOS está totalmente em execução e ao interagir com o motorista.
  • A tela é controlada pela política de energia, e não pelas chamadas de ativação/desativação da tela do Android para outros formatos.
Preparação para o desligamento
  • Quando o motorista para de dirigir, a VHAL instrui o AAOS a entrar na "Preparação para o desligamento". Neste estado, a tela e o áudio estão desligados e o AAOS não está interagindo com o motorista. O sistema Android ainda está em execução e pode atualizar apps e o sistema Android. Quando as atualizações (se houver) são concluídas, o sistema Android entra em "Aguardar conclusão da VHAL".
Aguarde a VHAL terminar
  • O AAOS informa à VHAL que ela pode ser desligada. A unidade do microcontrolador do veículo (VMCU) colocar o system on chip (SoC) em sono profundo e remover a energia do AP. O AAOS fica no estado STR, embora nenhum código esteja sendo executado.
  • Se a VHAL não terminar e o motorista retornar, a unidade principal (HU) vai fazer a transição direta para aguardar a VHAL.
Suspender para RAM (STR, na sigla em inglês)
  • O veículo e o AP estão desligados, nenhum código está sendo executado e a energia é mantida à RAM do AP.
Suspender para disco (STD)
  • O veículo e o AP estão desligados, nenhum código está sendo executado, nenhuma energia é mantida à unidade de processamento e à RAM do AP.

Como a política de energia é definida?

Os implementadores definem políticas de poder 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 automaticamente aplicadas 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
REDE DE DISPLAY
BLUETOOTH
Wi-Fi
CELULAR
ETHERNET
PROJEÇÃO
NFC
ENTRADA
INTERAÇÃO_por_VOZ
INTERAÇÃO_VISUAL
TRUSTED_DEVICE_DETECTION
LOCAL
MICROFONE
CPU

Os fornecedores também podem definir os próprios componentes de energia personalizados para uso com políticas de energia. Definição componentes de energia personalizados no mesmo arquivo XML que as políticas de energia, como neste exemplo:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

Grupo de políticas avançadas

A política de energia padrão é aplicada automaticamente na transição do estado de energia é no grupo de políticas de energia. Os fornecedores podem definir a política de energia padrão para Aguarde VHAL, ligado e aguarde a conclusão da VHAL (entrada em sono profundo ou início de desligamento).

Políticas de energia do sistema

O AAOS oferece suporte a duas políticas de energia do sistema, que são 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, modo garagem, suspender para RAM ou suspender para disco.

As tabelas a seguir listam o comportamento de cada componente na política de energia do sistema. Os implementadores podem substituir o Bluetooth, a NFC e a detecção de dispositivos confiáveis na política de energia do sistema sem interação do usuário. As substituições são aplicadas em /vendor/etc/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 neste tabela:

Componentes Estado de potência Configurável
Áudio Desativado Não
Mídia Desativado Não
Tela 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
Google Assistente Desativado Não
Interação do usuário Desativado Não
Detecção de dispositivo confiável para login de usuários Ativado Sim
Local Desativado Não
Microfone Desativado Não
CPU Ativado Não

suspender preparação

O comportamento da política de energia do sistema suspend prep é definido nesta tabela:

Componentes Estado de potência Configurável pelo OEM
Áudio Desativado Não
Mídia N/A Não
Tela 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
Google Assistente N/A Não
Interação do usuário N/A Não
Detecção de dispositivo confiável para login de usuários 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 detectar da VHAL:

  • POWER_POLICY_REQ: a VHAL grava o ID da política de energia nessa propriedade.
  • POWER_POLICY_GROUP_REQ: a VHAL grava o ID do grupo de políticas de energia a esta propriedade.

A política de energia atual do sistema pode ser alterada por módulos diferentes de VHAL. Nesse caso, o daemon da política de energia do carro atualiza a propriedade CURRENT_POWER_POLICY para notificar o para a VHAL.

Interação com processos nativos

Como mencionado acima, o daemon da política de energia do carro é executado na camada do sistema e, em termos de O gerenciamento de políticas oferece quase a mesma funcionalidade do CPMS executado na camada do framework. Além disso, suponha que o daemon da política de energia do carro e os CPMS estejam totalmente sincronizados.

O daemon da 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 uma precisa mudar o estado de potência.

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

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 devem ser informado quando uma política de energia é aplicada pode registrar um listener de mudança de política de energia para CarPowerManager