Per garantire che i componenti hardware e software (come display, audio e interazione vocale) vengano attivati e disattivati in modo selettivo secondo necessità, AAOS fornisce una politica di alimentazione, che consiste in una serie di stati di accensione e spegnimento previsti per i componenti hardware e software . VHAL, o servizi del fornitore con privilegi di sistema, possono applicare una nuova politica di alimentazione quando lo stato di alimentazione di Android passa o quando vengono soddisfatte le condizioni in attesa.
L'applicazione di una politica di alimentazione è consentita negli stati di attesa per VHAL e acceso. In Preparazione allo spegnimento, la modalità Garage è in esecuzione e non dovrebbe essere disturbata da una modifica dello stato di alimentazione. Sebbene non sia possibile applicare una politica di alimentazione regolare, una politica di alimentazione speciale , ovvero la politica di alimentazione del sistema denominata "nessuna interazione dell'utente", viene applicata in Shutdown Prepare.
Stato di alimentazione AAA
I dispositivi AAOS seguono questo diagramma dello stato di alimentazione:
Figura 1. Diagramma dello stato di alimentazione AAOS
Ogni stato di alimentazione è descritto di seguito:
Valore | Descrizione |
---|---|
Spento | Non viene fornita alimentazione fisica al processore dell'applicazione (AP), alla memoria e alle periferiche. |
Aspetta VHAL |
|
SU |
|
Preparare lo spegnimento |
|
Attendi che VHAL finisca |
|
Sospensione su RAM (STR) | Il veicolo e l'AP sono spenti, non viene eseguito alcun codice e l'alimentazione viene mantenuta alla RAM dell'AP. |
Architettura del software
L'architettura della politica di alimentazione è illustrata di seguito e definita nella sezione seguente:
Figura 2. Architettura della politica di alimentazione
Come viene definita la politica del potere?
Gli implementatori definiscono le politiche di alimentazione in /vendor/etc/automotive/power_policy.xml
, che:
- Definisce la politica di alimentazione.
- Definisce i gruppi di criteri di alimentazione, che includono il criterio di alimentazione predefinito e vengono applicati automaticamente quando si verificano transizioni di stato di alimentazione.
- Sostituisci la politica di alimentazione del sistema.
Politica del potere
La politica di alimentazione è un insieme di stati di alimentazione previsti dei componenti hardware e software. AAOS supporta i seguenti componenti nella politica di alimentazione:
-
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
Gruppo di criteri di alimentazione
La politica di alimentazione predefinita viene applicata automaticamente alla transizione dello stato di alimentazione è specificata nel gruppo di politiche di alimentazione. I fornitori possono definire la politica di alimentazione predefinita per Wait For VHAL, On e Wait for VHAL Finish (Deep Sleep Entry o Shutdown Start).
Politica di alimentazione del sistema
AAOS supporta solo una politica di alimentazione del sistema, che è "nessuna interazione dell'utente". La politica di alimentazione del sistema viene applicata quando il dispositivo passa in modalità silenziosa o garage.
Il comportamento di ciascun componente nella politica di alimentazione del sistema è elencato nella tabella seguente. Gli implementatori possono ignorare il rilevamento di dispositivi Bluetooth, NFC e Trusted nella politica di alimentazione del sistema. Le sostituzioni vengono applicate in /vendor/etc/power_policy.xml
.
Componenti | Stato di potere | Configurabile |
---|---|---|
Audio | Spento | No |
Media | Spento | No |
Visualizza principale | Spento | No |
Cluster di visualizzazione | Spento | No |
Visualizza passeggero anteriore | Spento | No |
Visualizza passeggero posteriore | Spento | No |
Bluetooth | Spento | SÌ |
Wifi | SU | No |
Cellulare | SU | No |
Ethernet | SU | No |
Proiezione | Spento | No |
NFC | Spento | SÌ |
Ingresso | Spento | No |
Interazione vocale | Spento | No |
Interazione visiva | Spento | No |
Rilevamento dispositivo affidabile | SU | SÌ |
Posizione | Spento | No |
Microfono | Spento | No |
processore | SU | No |
Interazione con il VHAL
Il demone della politica di alimentazione dell'auto in esecuzione nel livello di sistema sottoscrive due proprietà per ascoltare le richieste dal VHAL:
-
POWER_POLICY_REQ
, il VHAL scrive l'ID della politica di alimentazione in questa proprietà. -
POWER_POLICY_GROUP_REQ
, il VHAL scrive l'ID del gruppo di politiche di alimentazione in questa proprietà.
La politica di alimentazione corrente nel sistema può essere modificata da moduli diversi da VHAL. In tal caso, il daemon della politica di alimentazione dell'auto aggiorna la proprietà CURRENT_POWER_POLICY
per notificare la modifica al VHAL.
Interazione con processi nativi
Come accennato in precedenza, il demone della politica di alimentazione dell'auto viene eseguito nel livello di sistema e, in termini di gestione della politica di alimentazione, fornisce quasi le stesse funzionalità del CPMS in esecuzione nel livello del framework. Si supponga inoltre che il demone della politica di alimentazione dell'auto e il CPMS siano completamente sincronizzati.
Il demone della politica di alimentazione dell'auto esporta le interfacce AIDL per l'utilizzo da parte di HAL e altri processi nativi. Possono essere avvisati quando viene modificata una nuova politica di alimentazione. In altre parole, quando ognuno deve cambiare il suo 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. */ 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); }
Interazione con moduli Java
CarPowerManager
fornisce metodi per abilitare la gestione dei criteri di alimentazione:
- Ottieni l'attuale politica di alimentazione.
- Ottieni il gruppo di politiche di alimentazione corrente
- Applicare una nuova politica di alimentazione
- Impostare un nuovo gruppo di politiche di alimentazione
Solo i moduli con privilegi di sistema possono utilizzare i metodi. I moduli che desiderano essere informati quando viene applicata una politica di alimentazione, possono registrare un listener di modifica della politica di alimentazione su CarPowerManager
.