Per garantire che i componenti hardware e software (come display, audio e interazione vocale) vengano attivati e disattivati selettivamente in base alle necessità, AAOS fornisce una policy di alimentazione, che consiste in un insieme 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 policy di alimentazione quando lo stato di alimentazione di Android cambia o quando vengono soddisfatte le condizioni che stanno aspettando.
L'applicazione di una norma di alimentazione è consentita negli stati Wait for VHAL e On (a volte con alcune limitazioni). In Shutdown Prepare, la modalità Garage è in esecuzione e non deve essere interrotta da una modifica dello stato di alimentazione. Sebbene non sia possibile applicare un normale criterio di alimentazione, in Shutdown Prepare viene applicato un criterio di alimentazione speciale, ovvero il criterio di alimentazione di sistema denominato Nessuna interazione utente.
Stato di alimentazione di AAOS
I dispositivi AAOS seguono questo diagramma degli stati di alimentazione:

Figura 1. Diagramma dello stato di alimentazione di AAOS.
Di seguito sono descritti i vari stati di alimentazione:
| Valore | Descrizione |
|---|---|
| Off |
|
| Attendi VHAL |
|
| On |
|
| Shutdown prepare |
|
| Attendi il completamento di VHAL |
|
| Sospensione alla RAM (STR) |
|
| Sospensione su disco (STD) |
|
Come viene definita la policy di alimentazione?
Gli implementatori definiscono i criteri per il risparmio energia in /vendor/etc/automotive/power_policy.xml, che:
- Definisce il criterio di alimentazione.
- Definisce i gruppi di criteri di alimentazione, che includono i criteri di alimentazione predefiniti e vengono applicati automaticamente quando si verificano transizioni dello stato di alimentazione.
- Esegue l'override dei criteri di alimentazione del sistema.
Norme relative all'alimentazione
Il criterio per il risparmio energia è costituito da un insieme di stati di alimentazione previsti dei componenti hardware e software. AAOS supporta questi componenti nel criterio di alimentazione:
|
AUDIO MEDIA DISPLAY BLUETOOTH |
WI-FI CELLULARE ETHERNET PROIEZIONE |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
I fornitori possono anche definire i propri componenti di alimentazione personalizzati da utilizzare con le policy di alimentazione. Definisci i componenti di alimentazione personalizzati nello stesso file XML delle policy di alimentazione, come in questo esempio:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Gruppo di criteri di alimentazione
Il gruppo di criteri di alimentazione specifica il criterio di alimentazione predefinito da applicare automaticamente durante le transizioni dello stato di alimentazione. I fornitori possono definire i criteri di alimentazione predefiniti per Wait For VHAL, On e Wait for VHAL Finish (Deep Sleep Entry o Shutdown Start).
Policy di alimentazione del sistema
AAOS supporta due criteri di alimentazione del sistema: nessuna interazione dell'utente e preparazione alla sospensione. Il criterio di alimentazione del sistema viene applicato quando il dispositivo entra in modalità silenziosa, modalità garage, sospensione in RAM o sospensione su disco.
Le seguenti tabelle elencano il comportamento di ogni componente nelle impostazioni di risparmio energetico del sistema.
Gli implementatori possono ignorare il rilevamento di Bluetooth, NFC e Dispositivo attendibile nel criterio di alimentazione del sistema senza interazione dell'utente. Gli override vengono applicati in
/vendor/etc/power_policy.xml.
nessuna interazione utente
Il comportamento del criterio di alimentazione del sistema Nessuna interazione utente è definito in questa tabella:
| Componenti | Stato alimentazione | Configurabile |
|---|---|---|
| Audio | Off | No |
| Media | Off | No |
| Display | Off | No |
| Bluetooth | Off | Sì |
| Wifi | On | No |
| Cellulare | On | No |
| Ethernet | On | No |
| Proiezione | Off | No |
| NFC | Off | Sì |
| Input | Off | No |
| Assistente | Off | No |
| Interazione utente | Off | No |
| Rilevamento dei dispositivi attendibili per l'accesso dell'utente | On | Sì |
| Località | Off | No |
| Microfono | Off | No |
| CPU | On | No |
suspend prep
Il comportamento della policy di alimentazione del sistema suspend prep è definito in questa tabella:
| Componenti | Stato di alimentazione | Configurabile dall'OEM |
|---|---|---|
| Audio | Off | No |
| Media | 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 |
| Input | N/D | No |
| Assistente | N/D | No |
| Interazione utente | N/D | No |
| Rilevamento dei dispositivi attendibili per l'accesso dell'utente | N/D | No |
| Località | Off | No |
| Microfono | Off | No |
| CPU | Off | No |
Interazione con VHAL
Il daemon delle norme di alimentazione dell'auto in esecuzione nel livello di sistema sottoscrive due proprietà per ascoltare le richieste dal VHAL:
POWER_POLICY_REQVHAL scrive l'ID della policy di alimentazione in questa proprietà.POWER_POLICY_GROUP_REQVHAL scrive l'ID del gruppo di criteri di alimentazione in questa proprietà.
Il criterio di alimentazione corrente nel sistema può essere modificato da moduli diversi da VHAL. In questo caso,
il daemon della policy di alimentazione dell'auto aggiorna la proprietà CURRENT_POWER_POLICY per notificare la
modifica a VHAL.
Interazione con i processi nativi
CarPowerManagementService (CPMS) delega la gestione dei criteri di alimentazione al daemon dei criteri di alimentazione dell'auto. Il daemon è l'unica fonte attendibile per le norme di alimentazione del sistema. Il daemon dei criteri di alimentazione dell'auto gestisce lo stato dei criteri di alimentazione e invia notifiche di modifiche a CPMS, VHAL e altri client nativi.
Il daemon delle norme di alimentazione dell'auto esporta interfacce AIDL per l'utilizzo da parte di HAL e altri processi nativi. Possono ricevere una notifica quando viene modificata una nuova policy di alimentazione. In altre parole, quando ciascuno deve cambiare il proprio 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 attivare la gestione delle norme di alimentazione:
- Ottieni i criteri di alimentazione attuali
- Applicare un nuovo criterio di alimentazione
- Impostare un nuovo gruppo di criteri per il risparmio energia
Solo i moduli con privilegi di sistema possono utilizzare i metodi. I moduli che vogliono essere
informati quando viene applicata una norma di risparmio energetico possono registrare un listener di modifica della norma di risparmio energetico per
CarPowerManager