Per garantire che i componenti hardware e software (come display, audio e interazione vocale) siano attivati e disattivati selettivamente 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, può 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 Wait for VHAL e On. In Shutdown Prepare, la modalità Garage è in esecuzione e non dovrebbe essere disturbata da un cambiamento dello stato di alimentazione. Anche se non è possibile applicare una politica di alimentazione normale, in Preparazione allo spegnimento viene applicata una politica di alimentazione speciale , ovvero la politica di alimentazione del sistema denominata "nessuna interazione utente".
Stato di alimentazione AAOS
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 | Al processore applicativo (AP), alla memoria e alle periferiche non viene fornita fisicamente alcuna alimentazione. |
Aspetta VHAL |
|
SU |
|
Preparazione allo spegnimento |
|
Attendi che VHAL finisca |
|
Sospensione su RAM (STR) | Il veicolo e l'AP sono spenti, non viene eseguito alcun codice e la RAM dell'AP è alimentata. |
Architettura del software
L'architettura della politica energetica è illustrata di seguito e definita nella sezione seguente:
Figura 2. Architettura della politica energetica
Come viene definita la politica energetica?
Gli implementatori definiscono le politiche di alimentazione in /vendor/etc/automotive/power_policy.xml
, che:
- Definisce la politica energetica.
- Definisce i gruppi di policy di alimentazione, che includono la policy di alimentazione predefinita e vengono applicati automaticamente quando si verificano transizioni di stato di alimentazione.
- Sostituisci la politica di alimentazione del sistema.
Politica di potere
La politica energetica è un insieme di stati energetici previsti dei componenti hardware e software. AAOS supporta i seguenti componenti nella politica energetica:
-
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 politiche energetiche
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 policy di alimentazione predefinita per Wait For VHAL, On e Wait for VHAL Finish (Deep Sleep Entry o Shutdown Start).
Politica energetica del sistema
AAOS supporta solo una politica di alimentazione del sistema, ovvero "nessuna interazione con l'utente". La politica di risparmio energia del sistema viene applicata quando il dispositivo entra in modalità Garage.
Il comportamento di ciascun componente nella politica di alimentazione del sistema è elencato nella tabella seguente. Gli implementatori possono ignorare Bluetooth, NFC e il rilevamento dei dispositivi attendibili nella politica di alimentazione del sistema. Le sostituzioni vengono applicate in /vendor/etc/power_policy.xml
.
Componenti | Stato di potenza | Configurabile |
---|---|---|
Audio | Spento | NO |
Media | Spento | NO |
Visualizza principale | Spento | NO |
Gruppo di visualizzazione | Spento | NO |
Visualizza il passeggero anteriore | Spento | NO |
Visualizza il 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 dei dispositivi attendibili | 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à.
L'attuale politica energetica nel sistema può essere modificata da moduli diversi da VHAL. In tal caso, il daemon della policy 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 energetica dell'auto viene eseguito a livello di sistema e, in termini di gestione della politica energetica, fornisce quasi le stesse funzionalità del CPMS in esecuzione a livello quadro. Inoltre, presupponiamo che il daemon 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 degli HAL e di altri processi nativi. Possono ricevere una notifica quando viene modificata una nuova politica di alimentazione. In altre parole, quando ciascuno deve cambiare il proprio stato di potere.
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 delle politiche di alimentazione:
- Ottieni la politica energetica attuale.
- Ottieni il gruppo di policy di alimentazione corrente
- Applicare una nuova politica di alimentazione
- Imposta un nuovo gruppo di criteri 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
.