Criterio di alimentazione

Per garantire che i componenti hardware e software (ad esempio display, audio e interazione vocale) vengono attivati e disattivati in modo selettivo secondo necessità, AAOS fornisce un criterio per l'alimentazione, ovvero insieme degli stati di accensione e spegnimento previsti per i componenti hardware e software. VHAL o privilegiati di sistema, possono applicare un nuovo criterio di alimentazione quando lo stato dell'alimentazione di Android transizioni o quando le condizioni che sta aspettando sono soddisfatte.

L'applicazione di un criterio di alimentazione è consentita negli stati Attendi VHAL e On (a volte con alcune limitazioni). In Preparazione all'arresto, la modalità Garage è in esecuzione e dovrebbe non essere disturbato da un cambiamento dello stato di alimentazione. Sebbene non sia possibile applicare una normale politica di alimentazione, il criterio di alimentazione speciale, ovvero il criterio di alimentazione del sistema denominato "Nessuna interazione dell'utente", viene applicato in Preparazione all'arresto.

Stato di alimentazione AAOS

I dispositivi AAOS seguono questo diagramma dello stato di alimentazione:

Diagramma dello stato di alimentazione di AAOS

Figura 1. Diagramma dello stato di alimentazione di AAOS.

Ogni stato dell'alimentazione è descritto di seguito:

Valore Descrizione
Off
  • fisicamente non viene fornita alimentazione al processore dell'applicazione (AP), alla memoria periferiche.
Attendi VHAL
  • Quando il conducente interagisce con il veicolo (ad esempio aprendo una porta), il VMCU viene applicato l'alimentazione dell'AP, la memoria. e periferiche.
  • Transizioni di AAOS da uno di tre stati (Off, Sospendi alla RAM (STR, Attendi il completamento di VHAL)) quindi entra in attesa di VHAL, dove attende il coordinamento con il VHAL.
On
  • VHAL indica all'AAOS di attivare lo stato On. In questo stato, AAOS è completamente in esecuzione a interagire con il conducente.
  • Il display è controllato dal criterio di alimentazione e non dalle chiamate On/Off del display Android e i fattori di forma.
Preparazione all'arresto
  • Quando il conducente smette di guidare, il VHAL chiede all'AAOS di attivare la preparazione per lo spegnimento. In questo stato, il display e l'audio sono disattivati e l'AAOS non interagisce con il conducente. Il sistema Android è ancora in esecuzione e può aggiornare le app e il sistema Android. Al termine degli eventuali aggiornamenti, il sistema Android attiva Attendi il completamento VHAL.
Attendi il completamento di VHAL
  • AAOS informa la VHAL che può essere arrestata. L'unità microcontroller del veicolo (VMCU) è dovrebbe porre il SoC (System-on-Chip) nella fase di sonno profondo e rimuovere energia dall'AP. AAOS si trova quindi nello stato STR, anche se non viene eseguito alcun codice.
  • Se VHAL non termina e il conducente torna, l'unità principale (HU) deve passare direttamente per attendere VHAL.
Sospendi alla RAM (STR)
  • Il veicolo e il punto di accesso sono spenti, non viene eseguito alcun codice e l'alimentazione è mantenuta all'AP RAM.
Sospensione su disco
  • Il veicolo e il punto di accesso sono spenti, non viene eseguito alcun codice e non viene mantenuta alcuna alimentazione. all'unità di elaborazione e alla RAM AP.

Come viene definita la norma dell'alimentazione?

Gli strumenti di implementazione definiscono i criteri di alimentazione in /vendor/etc/automotive/power_policy.xml, che:

  • Definisce il criterio di alimentazione.
  • Definisce i gruppi di criteri di risparmio energia, che includono il criterio predefinito e vengono automaticamente applicata quando si verificano transizioni di stato dell'alimentazione.
  • Consente di sostituire i criteri di alimentazione del sistema.

Criterio di alimentazione

I criteri di alimentazione sono costituiti da un insieme di stati di alimentazione previsti dei componenti hardware e software. Nei criteri relativi all'alimentazione, AAOS supporta i seguenti componenti:

AUDIO
MEDIA
DISPLAY
BLUETOOTH
Wi-Fi
Cellulare
Ethernet
PROIEZIONE
NFC
INGRESSO
INTERAZIONE_VOCE
INTERAZIONE_VISUALE
RILEVAMENTO_DISPOSITIVO_ATTENDIBILE
LOCALITÀ
MICROFONO
CPU

I fornitori possono anche definire i propri componenti di alimentazione personalizzati da utilizzare con i criteri di alimentazione. Definisci componenti di alimentazione personalizzati nello stesso file XML dei criteri di alimentazione, come in questo esempio:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

Gruppo di criteri di alimentazione

La norma di alimentazione predefinita viene applicata automaticamente al passaggio dello stato di alimentazione specificato nel gruppo di criteri di alimentazione. I fornitori possono definire il criterio di alimentazione predefinito Attendi VHAL, On e Attendi il completamento VHAL (Ingresso sonno profondo o Avvio arresto).

Criteri di alimentazione del sistema

AAOS supporta due criteri di alimentazione del sistema, ovvero nessuna interazione dell'utente e preparazione per sospensione. Il criterio di alimentazione del sistema viene applicato quando il dispositivo entra in Modalità silenziosa, modalità garage, sospensione su RAM o sospensione su disco.

Le seguenti tabelle elencano il comportamento di ciascun componente nel criterio di alimentazione del sistema. Gli implementatori possono eseguire l'override del rilevamento di Bluetooth, NFC e dispositivi attendibili nel criterio di alimentazione del sistema nessuna interazione dell'utente. Gli override vengono applicati in /vendor/etc/power_policy.xml.

nessuna interazione dell'utente

In questo documento viene definito il comportamento del criterio di alimentazione del sistema Nessuna interazione dell'utente tabella:

Componenti Stato alimentazione Configurabile
Audio Off No
Contenuti multimediali Off No
Display Off No
Bluetooth Off
Wifi On No
Cellulare On No
Ethernet On No
Proiezione Off No
NFC Off
Ingresso Off No
Assistente Off No
Interazione utente Off No
Rilevamento dei dispositivi attendibili per l'accesso degli utenti On
Posizione Off No
Microfono Off No
CPU On No

sospensione preparazione

In questa tabella viene definito il comportamento dei criteri di alimentazione dell'impianto per la preparazione alla sospensione:

Componenti Stato alimentazione Configurabile dall'OEM
Audio Off No
Contenuti multimediali N/D No
Display N/D No
Bluetooth Off No
Wifi Off No
Cellulare N/D No
Ethernet N/D No
Proiezione N/D No
NFC N/D No
Ingresso N/D No
Assistente N/D No
Interazione utente N/D No
Rilevamento dei dispositivi attendibili per l'accesso degli utenti N/D No
Posizione Off No
Microfono Off No
CPU Off No

Interazione con il VHAL

Il daemon dei criteri di alimentazione delle auto in esecuzione nel livello di sistema sottoscrive due proprietà da ascoltare richieste da parte della VHAL:

  • POWER_POLICY_REQ: VHAL scrive l'ID criterio di alimentazione in questa proprietà.
  • POWER_POLICY_GROUP_REQ, VHAL scrive l'ID gruppo di criteri di alimentazione a questa proprietà.

L'attuale criterio di alimentazione nel sistema può essere modificato da moduli diversi da VHAL. In questo caso, il daemon dei criteri di alimentazione dell'auto aggiorna la proprietà CURRENT_POWER_POLICY per inviare una notifica passa a VHAL.

Interazione con i processi nativi

Come già detto, il daemon dei criteri di alimentazione delle auto funziona nel livello di sistema e, in termini di potenza, la gestione dei criteri, fornisce quasi le stesse funzionalità dei CPM nel livello framework. Inoltre, supponiamo che il daemon dei criteri di alimentazione dell'auto e i CPM siano completamente sincronizzati.

Il daemon dei criteri di alimentazione delle auto esporta le interfacce AIDL per l'utilizzo da parte degli HAL e di altri processi nativi. Possono essere avvisati quando viene modificata una nuova norma di alimentazione. In altre parole, ogni volta che devono cambiare stato di alimentazione.

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);
  }

Interazione con i moduli Java

CarPowerManager fornisce metodi per abilitare la gestione dei criteri di alimentazione:

  • Ottieni il criterio di alimentazione attuale
  • Applica un nuovo criterio di alimentazione
  • Imposta un nuovo gruppo di criteri di alimentazione

Solo i moduli con privilegi di sistema possono utilizzare questi metodi. Moduli che desiderano quando viene applicato un criterio di alimentazione, è possibile registrare un listener di modifiche al criterio di alimentazione CarPowerManager