Zasada zasilania

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:

Schemat stanu zasilania AAOS

Rysunek 1. Schemat stanu zasilania AAOS.

Poniżej opisujemy poszczególne stany zasilania:

Wartość Opis
Wyłączono
  • Procesor aplikacji, pamięć i urządzeń peryferyjnych.
Poczekaj na VHAL
  • Gdy kierowca wchodzi w interakcję z pojazdem (np. przez otwarcie drzwi), obowiązuje VMCU do zasilania punktu dostępu, pamięci. urządzeń peryferyjnych i urządzeń peryferyjnych.
  • Przejścia AAOS z jednego z 3 stanów (Wyłączone, Zawieszanie w pamięci RAM (STR, Poczekaj na zakończenie działania VHAL)) a następnie przechodzi do oczekiwania na VHAL, gdzie oczekuje na koordynację z VHAL.
Włączono
  • VHAL nakazuje AAOS przejście w stan włączenia. W tym stanie aplikacje AAOS są w pełni uruchomione interakcji z kierowcą.
  • Ekran jest sterowany przez zasady zasilania, a nie przez włączenie lub wyłączenie wyświetlacza w przypadku innych i formatów.
Przygotowanie do wyłączenia
  • Gdy kierowca zatrzymuje jazdę, VHAL nakazuje systemowi AAOS otwarcie przygotowań do wyłączenia. W tym stanie ekran i dźwięk są wyłączone, a AAOS nie wchodzi w interakcję z sterownika. System Android nadal działa i może aktualizować aplikacje oraz system Android. Po zakończeniu aktualizacji (jeśli jakieś są) system Android wyświetla komunikat Poczekaj na zakończenie VHAL.
Poczekaj na zakończenie działania VHAL
  • AAOS informuje VHAL, że można go wyłączyć. Jednostka z mikrokontrolerem pojazdu (VMCU) jest ma umieścić układ SOC w fazie snu głębokiego i odebrać zasilanie punktu dostępu. AAOS jest wtedy w stanie STR, ale żaden kod nie jest wykonywany.
  • Jeśli VHAL nie skończy, a kierowca wróci, jednostka centralna (HU) powinna przejść bezpośrednio i czekaj na VHAL.
Zawieszenie w pamięci RAM (STR)
  • Pojazd i punkt dostępu są wyłączone, kod nie jest wykonywany, a zasilanie jest utrzymywane do pamięci RAM AP.
Zawieszanie na dysku (STD)
  • Pojazd i punkt dostępu są wyłączone, nie jest wykonywany żaden kod, nie ma zasilania z procesorem i pamięcią RAM.

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