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:
Figura 1. Diagramma dello stato di alimentazione di AAOS.
Ogni stato dell'alimentazione è descritto di seguito:
Valore | Descrizione |
---|---|
Off |
|
Attendi VHAL |
|
On |
|
Preparazione all'arresto |
|
Attendi il completamento di VHAL |
|
Sospendi alla RAM (STR) |
|
Sospensione su disco |
|
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 | Sì |
Wifi | On | No |
Cellulare | On | No |
Ethernet | On | No |
Proiezione | Off | No |
NFC | Off | Sì |
Ingresso | Off | No |
Assistente | Off | No |
Interazione utente | Off | No |
Rilevamento dei dispositivi attendibili per l'accesso degli utenti | On | Sì |
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