Aby zapewnić, że komponenty i oprogramowanie (np. wyświetlacz, dźwięk i interakcja głosowa) są selektywnie włączane i wyłączane w razie potrzeby, AAOS udostępnia zasadę zasilania, która składa się zestaw oczekiwanych stanów włączania i wyłączania komponentów sprzętu i oprogramowania. VHAL lub usługi dostawcy z podwyższonymi uprawnieniami do systemu, mogą stosować nowe zasady zasilania, gdy stan zasilania Androida przejścia lub gdy są spełnione oczekujące warunki.
Stosowanie zasad zasilania jest dozwolone w stanach Poczekaj na VHAL i Włączone (czasami z pewnymi ograniczeniami). W trybie przygotowania do wyłączenia tryb garażowy jest włączony i powinien nie zakłócić żadnej zmiany stanu zasilania. Chociaż nie można zastosować zwykłych zasad dotyczących zasilania, Specjalna zasada zasilania, czyli zasada zasilania systemu o nazwie Brak interakcji użytkownika, jest stosowana Wyłączanie i przygotuj się.
Stan zasilania AAOS
Urządzenia AAOS mają następujący schemat stanu zasilania:
Rysunek 1. Schemat stanu zasilania AAOS.
Poniżej opisujemy poszczególne stany zasilania:
Wartość | Opis |
---|---|
Wyłączono |
|
Poczekaj na VHAL |
|
Włączono |
|
Przygotowanie do wyłączenia |
|
Poczekaj na zakończenie działania VHAL |
|
Zawieszenie w pamięci RAM (STR) |
|
Zawieszanie na dysku (STD) |
|
Jak definiuje się zasady dotyczące zasilania?
Weryfikatorzy definiują zasady dotyczące zasilania w /vendor/etc/automotive/power_policy.xml
,
który:
- Definiuje zasadę zasilania.
- Definiuje grupy zasad dotyczących zasilania, które zawierają domyślne zasady zasilania i są automatycznie jest stosowany, gdy następuje zmiana stanu zasilania.
- Zastępuje zasadę zasilania systemu.
Zasada zasilania
Zasada zasilania składa się z zestawu oczekiwanych stanów zasilania sprzętu i oprogramowania. AAOS obsługuje te komponenty w zasadach zasilania:
DŹWIĘK MULTIMEDIA DISPLAYOWA BLUETOOTH |
Wi-Fi KOMÓRKOWA Ethernet PROJEKT |
NFC WEJŚCIE INTERAKCJA_GŁOSOWA INTERAKCJA_WIZUALNA |
ZAUFANE_URZĄDZENIE_ LOKALIZACJA MIKROFON procesor |
Dostawcy mogą też definiować własne niestandardowe komponenty zasilania na potrzeby zasad dotyczących zasilania. Zdefiniuj niestandardowe komponenty zasilania w tym samym pliku XML co zasady zasilania, jak w tym przykładzie:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Grupa zasad dotyczących zasilania
Domyślna zasada zasilania jest stosowana automatycznie przy zmianie stanu zasilania określone w grupie zasad zasilania. Dostawcy mogą zdefiniować domyślne zasady zasilania dla Poczekaj na zakończenie VHAL, włączenie i zaczekanie na zakończenie VHAL (tryb głębokiego snu lub uruchomienie wyłączenia).
Zasady dotyczące zasilania systemu
AAOS obsługuje 2 zasady zasilania systemu: brak interakcji użytkownika zawieś tekst na początku. Systemowa zasada zasilania jest stosowana, gdy urządzenie tryb cichy, tryb garażowy, zawieszenie w pamięci RAM i zawieszenie na dysku.
W tabelach poniżej znajdziesz zachowanie każdego komponentu w zasadzie zasilania systemu.
Implementacje mogą zastąpić wykrywanie Bluetootha, NFC i zaufanego urządzenia w
zasady zasilania systemu związane z brakiem interakcji z użytkownikiem. Zastąpienia są stosowane w
/vendor/etc/power_policy.xml
brak interakcji użytkownika
Działanie zasady zasilania systemu brak interakcji użytkownika opisano w tym tabela:
Komponenty | Stan zasilania | Konfigurowalne |
---|---|---|
Audio | Wyłączono | Nie |
Multimedia | Wyłączono | Nie |
Wyświetlacz | Wyłączono | Nie |
Bluetooth | Wyłączono | Tak |
Wi-Fi | Włączono | Nie |
Sieć komórkowa | Włączono | Nie |
Ethernet | Włączono | Nie |
Prognoza | Wyłączono | Nie |
NFC | Wyłączono | Tak |
Wprowadź tekst | Wyłączono | Nie |
Asystent | Wyłączono | Nie |
Interakcje użytkownika | Wyłączono | Nie |
Wykrywanie zaufanych urządzeń podczas logowania użytkownika | Włączono | Tak |
Lokalizacja | Wyłączono | Nie |
mikrofon | Wyłączono | Nie |
Procesor | Włączono | Nie |
zawieszenia
Sposób działania zasady zasilania systemu zawieszenia na początku jest opisane w tej tabeli:
Komponenty | Stan zasilania | Konfigurowane przez OEM |
---|---|---|
Audio | Wyłączono | Nie |
Multimedia | Nie dotyczy | Nie |
Wyświetlacz | Nie dotyczy | Nie |
Bluetooth | Wyłączono | Nie |
Wi-Fi | Wyłączono | Nie |
Sieć komórkowa | Nie dotyczy | Nie |
Ethernet | Nie dotyczy | Nie |
Prognoza | Nie dotyczy | Nie |
NFC | Nie dotyczy | Nie |
Wprowadź tekst | Nie dotyczy | Nie |
Asystent | Nie dotyczy | Nie |
Interakcje użytkownika | Nie dotyczy | Nie |
Wykrywanie zaufanych urządzeń podczas logowania użytkownika | Nie dotyczy | Nie |
Lokalizacja | Wyłączono | Nie |
mikrofon | Wyłączono | Nie |
Procesor | Wyłączono | Nie |
Interakcja z VHAL
demon zasad zasilania samochodu działający w warstwie systemu subskrybuje 2 usługi nasłuchiwane żądań od VHAL:
POWER_POLICY_REQ
VHAL zapisuje w tej usłudze identyfikator zasady zasilania.POWER_POLICY_GROUP_REQ
VHAL zapisuje identyfikator grupy zasad zasilających do tej usługi.
Bieżące zasady zasilania w systemie mogą być zmieniane przez moduły inne niż VHAL. W takim przypadku
demon zasad dotyczących zasilania samochodu aktualizuje właściwość CURRENT_POWER_POLICY
, aby powiadamiać
na VHAL.
Interakcja z procesami natywnymi
Jak wspomnieliśmy powyżej, demon zasad zasilania samochodu działa w warstwie systemowej i, pod względem mocy, zarządzania zasadami, udostępnia prawie te same funkcje co CPMS w warstwie platformy. Zakładamy też, że demon zasad zasilania samochodu i CPMS są w pełni zsynchronizowane.
Demon zasad zasilania samochodu eksportuje interfejsy AIDL do użycia przez interfejsy HAL i inne procesy natywne. Może otrzymywać powiadomienia o zmianach nowych zasad dotyczących zasilania. Innymi słowy, kiedy każdy z tych elementów musi się zmienić swojego stanu 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. * @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); }
Interakcja z modułami Java
CarPowerManager
udostępnia metody włączania zarządzania zasadami zasilania:
- Pobierz aktualną zasadę zasilania
- Zastosuj nową zasadę zasilania
- Ustaw nową grupę zasad dotyczących zasilania
Z tych metod mogą korzystać tylko moduły z podwyższonymi uprawnieniami systemu. Moduły, które mają być
informuje, gdy stosowana jest zasada zasilania, może zarejestrować detektor zmian zasad zasilania
CarPowerManager