Per garantire che i componenti hardware e software (ad esempio display, audio e interazione vocale) vengano attivati e disattivati in modo selettivo in base alle esigenze, AAOS fornisce un criterio di alimentazione, costituito da un insieme di stati di accensione e spegnimento previsti per i componenti hardware e software. VHAL o i servizi del fornitore con privilegi di sistema possono applicare un nuovo criterio di risparmio energetico quando lo stato di alimentazione di Android passa da uno stato all'altro o quando vengono soddisfatte le condizioni in attesa.
L'applicazione di un criterio di alimentazione è consentita negli stati di attesa per VHAL e attivo (a volte con alcune limitazioni). In Preparazione all'arresto, la modalità Garage è in esecuzione e non dovrebbe essere interrotta da una modifica dello stato dell'alimentazione. Sebbene non sia possibile applicare un criterio di alimentazione normale, in Preparazione all'arresto viene applicato un criterio di alimentazione speciale, ovvero il criterio di alimentazione del sistema denominato Nessuna interazione utente.
Stato di alimentazione di AAOS
I dispositivi AAOS seguono questo diagramma dello stato di alimentazione:
Figura 1. Diagramma dello stato di alimentazione di AAOS.
Di seguito sono descritti tutti gli stati di alimentazione:
Valore | Descrizione |
---|---|
Off |
|
Attendi VHAL |
|
On |
|
Preparazione all'arresto |
|
Attendi il completamento di VHAL |
|
Sospensione in RAM (STR) |
|
Sospensione su disco (STD) |
|
Come viene definito il criterio di risparmio energetico?
Gli implementatori definiscono i criteri per il risparmio energetico in /vendor/etc/automotive/power_policy.xml
,
che:
- Definisce il criterio di alimentazione.
- Definisce i gruppi di criteri di alimentazione, che includono il criterio di alimentazione predefinito e vengono applicati automaticamente quando si verificano transizioni dello stato di alimentazione.
- Sostituisce i criteri di alimentazione dell'impianto.
Norme relative al potere
Il criterio di risparmio energetico è costituito da un insieme di stati di alimentazione previsti per i componenti hardware e software. AAOS supporta i seguenti componenti nel criterio di alimentazione:
AUDIO MEDIA DISPLAY BLUETOOTH |
WIFI LTE ETHERNET PROIEZIONE |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
I fornitori possono anche definire i propri componenti di potenza personalizzati da utilizzare con i criteri di potenza. Definisci i componenti di potenza personalizzati nello stesso file XML dei criteri di potenza, come in questo esempio:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Gruppo di criteri di potenza
Il criterio di risparmio energetico predefinito viene applicato automaticamente al passaggio di stato di alimentazione specificato nel gruppo di criteri di risparmio energetico. I fornitori possono definire il criterio di alimentazione predefinito per Attendi VHAL, On e Attendi fine VHAL (ingresso in modalità Sospensione profonda o avvio arresto).
Criteri di alimentazione del sistema
AAOS supporta due criteri di risparmio energetico di sistema: Nessuna interazione 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 tabelle seguenti elencano il comportamento di ciascun componente nel criterio di alimentazione del sistema.
Gli implementatori possono ignorare il rilevamento di Bluetooth, NFC e dispositivi attendibili nel criterio di risparmio energetico del sistema senza interazione dell'utente. Le sostituzioni vengono applicate in
/vendor/etc/power_policy.xml
.
nessuna interazione utente
Il comportamento del criterio di risparmio energetico del sistema senza interazione utente è definito in questa 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ì |
Input | 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 |
sospendi prep
Il comportamento della policy di risparmio energetico del sistema preparazione alla sospensione è definito in questa tabella:
Componenti | Stato dell'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 |
Input | 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 del criterio di alimentazione dell'auto in esecuzione nel livello di sistema sottoscrive due proprietà per ascoltare le richieste del VHAL:
POWER_POLICY_REQ
il VHAL scrive l'ID della policy di alimentazione in questa proprietà.POWER_POLICY_GROUP_REQ
il VHAL scrive l'ID 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 delle norme di alimentazione dell'auto aggiorna la proprietà CURRENT_POWER_POLICY
per notificare la modifica al VHAL.
Interazione con i processi nativi
Come accennato in precedenza, il daemon dei criteri di potenza dell'auto viene eseguito nel livello di sistema e, in termini di gestione dei criteri di potenza, offre quasi le stesse funzionalità del CPMS in esecuzione nel livello del framework. Inoltre, presupponiamo che il demone dei criteri di alimentazione dell'auto e il CPMS siano completamente sincronizzati.
Il daemon delle norme di alimentazione dell'auto esporta le interfacce AIDL per l'utilizzo da parte di HAL e altri processi nativi. Possono ricevere una notifica quando viene modificato un nuovo criterio 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 abilitare la gestione dei criteri di alimentazione:
- Ottenere i criteri di alimentazione attuali
- Applicare un nuovo criterio di potenza
- Impostare un nuovo gruppo di criteri per il risparmio energetico
Solo i moduli con privilegi di sistema possono utilizzare i metodi. I moduli che vogliono essere informati quando viene applicato un criterio di alimentazione possono registrare un ascoltatore di modifiche del criterio di alimentazione in CarPowerManager