Aby zapewnić, że komponenty sprzętowe i programowe (takie jak wyświetlacz, dźwięk i interakcja głosowa) są selektywnie włączane i wyłączane w razie potrzeby, AAOS zapewnia politykę zasilania, która składa się z zestawu oczekiwanych stanów włączania i wyłączania zasilania dla komponentów sprzętowych i programowych . VHAL lub usługi dostawców uprzywilejowanych systemowo mogą zastosować nowe zasady zasilania, gdy nastąpi zmiana stanu zasilania Androida lub gdy zostaną spełnione warunki, na które czekają.
Stosowanie polityki zasilania jest dozwolone w stanach Wait for VHAL i On. W trybie przygotowania do zamknięcia działa tryb garażowy i nie powinna mu przeszkadzać zmiana stanu zasilania. Chociaż nie można zastosować zwykłej zasady zasilania, w ramach przygotowania do zamknięcia systemu stosowana jest specjalna zasada zasilania, czyli zasada zasilania systemu o nazwie „brak interakcji z użytkownikiem”.
Stan zasilania AAOS
Urządzenia AAOS postępują zgodnie z następującym schematem stanu zasilania:
Rysunek 1. Schemat stanu zasilania AAOS
Każdy stan zasilania jest opisany poniżej:
Wartość | Opis |
---|---|
Wyłączony | Procesor aplikacji (AP), pamięć i urządzenia peryferyjne nie są fizycznie zasilane. |
Poczekaj na VHAL |
|
Na |
|
Przygotowanie do wyłączenia |
|
Poczekaj na zakończenie VHAL |
|
Zawieszenie do pamięci RAM (STR) | Pojazd i AP są wyłączone, żaden kod nie jest wykonywany, a zasilanie jest utrzymywane w AP RAM. |
Architektura oprogramowania
Architektura polityki zasilania została zilustrowana poniżej i zdefiniowana w poniższej sekcji:
Rysunek 2. Architektura polityki zasilania
Jak definiuje się politykę energetyczną?
Realizatorzy definiują polityki zasilania w /vendor/etc/automotive/power_policy.xml
, które:
- Definiuje politykę zasilania.
- Definiuje grupy zasad zasilania, które obejmują domyślną zasadę zasilania i są automatycznie stosowane po wystąpieniu zmian stanu zasilania.
- Zastąp zasady zasilania systemu.
Polityka zasilania
Zasady zasilania to zestaw oczekiwanych stanów zasilania składników sprzętu i oprogramowania. AAOS obsługuje następujące elementy polityki zasilania:
-
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
Grupa polityki energetycznej
Domyślna zasada zasilania jest automatycznie stosowana w momencie zmiany stanu zasilania, który jest określony w grupie zasad zasilania. Dostawcy mogą zdefiniować domyślną zasadę zasilania dla opcji Oczekiwanie na VHAL, Włączenie i Oczekiwanie na zakończenie VHAL (wejście w stan głębokiego uśpienia lub rozpoczęcie zamykania).
Polityka zasilania systemu
AAOS obsługuje tylko jedną zasadę zasilania systemu, czyli „brak interakcji z użytkownikiem”. Zasady zasilania systemu są stosowane, gdy urządzenie przechodzi w tryb cichy lub tryb garażowy.
Zachowanie każdego komponentu w zasadach zasilania systemu przedstawiono w poniższej tabeli. Realizatorzy mogą pominąć wykrywanie Bluetooth, NFC i zaufanych urządzeń w zasadach zasilania systemu. Zastąpienia są stosowane w /vendor/etc/power_policy.xml
.
składniki | Stan zasilania | Konfigurowalny |
---|---|---|
Audio | Wyłączony | Nie |
Głoska bezdźwięczna | Wyłączony | Nie |
Główny wyświetlacz | Wyłączony | Nie |
Klaster wyświetlacza | Wyłączony | Nie |
Wyświetlacz pasażera z przodu | Wyłączony | Nie |
Wyświetlacz pasażera z tyłu | Wyłączony | Nie |
Bluetooth | Wyłączony | TAK |
Wi-Fi | NA | Nie |
Komórkowy | NA | Nie |
Ethernet | NA | Nie |
Występ | Wyłączony | Nie |
NFC | Wyłączony | TAK |
Wejście | Wyłączony | Nie |
Interakcja głosowa | Wyłączony | Nie |
Interakcja wizualna | Wyłączony | Nie |
Wykrywanie zaufanych urządzeń | NA | TAK |
Lokalizacja | Wyłączony | Nie |
Mikrofon | Wyłączony | Nie |
procesor | Na | Nie |
Interakcja z VHAL
Demon zasad zasilania samochodu działający w warstwie systemowej subskrybuje dwie właściwości, aby nasłuchiwać żądań z VHAL:
-
POWER_POLICY_REQ
, VHAL zapisuje identyfikator strategii zasilania do tej właściwości. -
POWER_POLICY_GROUP_REQ
, VHAL zapisuje identyfikator grupy zasad zasilania do tej właściwości.
Aktualną politykę zasilania w systemie można zmienić za pomocą modułów innych niż VHAL. W takim przypadku demon zasad zasilania samochodu aktualizuje właściwość CURRENT_POWER_POLICY
, aby powiadomić o zmianie VHAL.
Interakcja z procesami natywnymi
Jak wspomniano powyżej, demon polityki zasilania samochodu działa w warstwie systemu i, pod względem zarządzania polityką zasilania, zapewnia prawie taką samą funkcjonalność, jak CPMS działający w warstwie frameworka. Załóż również, że demon zasad zasilania samochodu i CPMS są w pełni zsynchronizowane.
Demon zasad zasilania samochodu eksportuje interfejsy AIDL do użytku przez warstwy HAL i inne procesy natywne. Mogą być powiadamiani o zmianie nowej polityki zasilania. Innymi słowy, kiedy każdy musi zmienić swój stan mocy.
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); }
Interakcja z modułami Java
CarPowerManager
udostępnia metody umożliwiające zarządzanie polityką zasilania:
- Pobierz aktualną politykę zasilania.
- Pobierz aktualną grupę polityki zasilania
- Zastosuj nową politykę zasilania
- Ustaw nową grupę zasad zasilania
Tylko moduły z uprawnieniami systemowymi mogą używać tych metod. Moduły, które chcą być informowane o zastosowaniu polityki zasilania, mogą zarejestrować detektor zmian polityki zasilania w CarPowerManager
.