Aby mieć pewność, że komponenty sprzętu i oprogramowania (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 komponentów sprzętu i oprogramowania . VHAL, czyli usługi dostawców uprzywilejowanych systemowo, mogą zastosować nową politykę zasilania w przypadku zmiany stanu zasilania Androida lub spełnienia oczekiwanych warunków.
Stosowanie polityki zasilania jest dozwolone w stanach Czekaj na VHAL i Włącz. W trybie przygotowania do zamknięcia działa tryb garażowy, którego nie powinna zakłócać zmiana stanu zasilania. Chociaż nie można zastosować zwykłych zasad zasilania, w przygotowaniu do zamknięcia systemu stosowana jest specjalna zasada zasilania, czyli zasada zasilania systemu o nazwie „brak interakcji użytkownika”.
Stan zasilania AAOS
Urządzenia AAOS działają zgodnie z poniższym diagramem stanu zasilania:
Rysunek 1. Diagram stanu zasilania AAOS
Każdy stan zasilania opisano poniżej:
Wartość | Opis |
---|---|
Wyłączony | Do procesora aplikacji (AP), pamięci i urządzeń peryferyjnych nie jest fizycznie dostarczane żadne zasilanie. |
Poczekaj na VHAL |
|
NA |
|
Przygotowanie do zamknięcia |
|
Poczekaj, aż VHAL zakończy |
|
Zawieszenie do pamięci RAM (STR) | Pojazd i punkt dostępowy są wyłączone, żaden kod nie jest wykonywany, a pamięć RAM punktu dostępowego jest utrzymana. |
Architektura oprogramowania
Architekturę polityki energetycznej przedstawiono poniżej i zdefiniowano w poniższej sekcji:
Rysunek 2. Architektura polityki energetycznej
Jak definiuje się politykę energetyczną?
Implementerzy definiują zasady zasilania w /vendor/etc/automotive/power_policy.xml
, które:
- Definiuje politykę energetyczną.
- Definiuje grupy zasad zasilania, które obejmują domyślne zasady zasilania i są automatycznie stosowane w przypadku wystąpienia zmiany stanu zasilania.
- Zastąp zasady zasilania systemu.
Polityka władzy
Polityka zasilania to zestaw oczekiwanych stanów zasilania komponentów sprzętu i oprogramowania. AAOS obsługuje następujące komponenty 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 zasad zasilania
Domyślna polityka zasilania jest stosowana automatycznie przy zmianie stanu zasilania określonej w grupie zasad zasilania. Dostawcy mogą zdefiniować domyślną politykę zasilania dla opcji Czekaj na VHAL, Włącz i Czekaj na zakończenie VHAL (wejście w tryb głębokiego uśpienia lub rozpoczęcie wyłączania).
Polityka zasilania systemu
AAOS obsługuje tylko jedną politykę zasilania systemu, czyli „brak interakcji z użytkownikiem”. Zasady zasilania systemu są stosowane, gdy urządzenie przechodzi w tryb garażowy.
Zachowanie każdego komponentu polityki zasilania systemu przedstawiono w poniższej tabeli. Osoby wdrażające mogą zastąpić wykrywanie urządzeń Bluetooth, NFC i zaufanych w zasadach zasilania systemu. Zastąpienia są stosowane w /vendor/etc/power_policy.xml
.
składniki | Stan zasilania | Konfigurowalne |
---|---|---|
Audio | Wyłączony | NIE |
Głoska bezdźwięczna | Wyłączony | NIE |
Wyświetl główne | 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 |
Ethernetu | 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 zaufanego urządzenia | NA | TAK |
Lokalizacja | Wyłączony | NIE |
Mikrofon | Wyłączony | NIE |
procesor | NA | NIE |
Interakcja z VHAL-em
Demon polityki energetycznej samochodu działający w warstwie systemowej subskrybuje dwie właściwości w celu nasłuchiwania żądań z VHAL:
-
POWER_POLICY_REQ
, VHAL zapisuje identyfikator polityki zasilania w tej właściwości. -
POWER_POLICY_GROUP_REQ
, VHAL zapisuje identyfikator grupy polityk zasilania do tej właściwości.
Aktualną politykę zasilania w systemie można zmieniać 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 energetycznej samochodu działa w warstwie systemowej i pod względem zarządzania polityką energetyczną zapewnia niemal taką samą funkcjonalność jak CPMS działający w warstwie frameworku. Załóżmy również, że demon zasad zasilania samochodu i CPMS są w pełni zsynchronizowane.
Demon polityki zasilania samochodu eksportuje interfejsy AIDL do użytku przez warstwy HAL i inne procesy natywne. Można je powiadamiać o zmianie nowej polityki energetycznej. Innymi słowy, kiedy każdy z nich musi zmienić swój stan zasilania.
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:
- Uzyskaj aktualną politykę zasilania.
- Pobierz bieżącą grupę zasad zasilania
- Zastosuj nową politykę zasilania
- Ustaw nową grupę zasad zasilania
Tylko moduły z uprawnieniami systemowymi mogą korzystać z tych metod. Moduły, które chcą być informowane o zastosowaniu polityki zasilania, mogą zarejestrować słuchacza zmian polityki zasilania w CarPowerManager
.