Zasady dotyczące mocy

Aby zapewnić selektywne włączanie i wyłączanie komponentów sprzętowych i programowych (takich jak wyświetlacz, dźwięk i interakcja głosowa) w razie potrzeby, AAOS udostępnia zasady zasilania, które składają się z zestawu oczekiwanych stanów włączenia i wyłączenia komponentów sprzętowych i programowych. VHAL lub usługi dostawcy z uprawnieniami systemowymi mogą zastosować nowe zasady zasilania, gdy zmieni się stan zasilania Androida lub zostaną spełnione warunki, na które czekają.

Zastosowanie zasady zasilania jest dozwolone w stanach Oczekiwanie na VHAL, Włączone i Przygotowanie do wyłączenia (czasami z pewnymi ograniczeniami). W odróżnieniu od stanów Wait for VHAL i On, w grupie zasad zasilania nie można skonfigurować domyślnej zasady zasilania dla stanu Pre Shutdown Prepare. W podstawowej fazie przygotowania do wyłączenia tryb garażowy jest uruchomiony i nie powinien być zakłócany przez zmianę stanu zasilania. Chociaż nie można zastosować zwykłej zasady dotyczącej zasilania, w fazie przygotowania do wyłączenia systemu stosowana jest specjalna zasada dotycząca zasilania, która jest zasadą dotyczącą zasilania systemu o nazwie brak interakcji z użytkownikiem.

Stan zasilania AAOS

Urządzenia z AAOS działają zgodnie z tym diagramem stanu zasilania:

Diagram stanu zasilania AAOS

Rysunek 1. Schemat stanu zasilania AAOS.

Poniżej opisujemy poszczególne stany zasilania:

Wartość Opis
Wyłączono
  • Do procesora aplikacji, pamięci i urządzeń peryferyjnych nie jest dostarczane zasilanie.
Czekaj na VHAL
  • Gdy kierowca wchodzi w interakcję z pojazdem (np. otwiera drzwi), VMCU zasila AP, pamięć i urządzenia peryferyjne.
  • AAOS przechodzi z jednego z 3 stanów (wyłączony, zawieszenie do pamięci RAM (STR, oczekiwanie na zakończenie VHAL)) i przechodzi do stanu oczekiwania na VHAL, gdzie czeka na koordynację z VHAL.
Włączono
  • VHAL instruuje AAOS, aby przeszedł w stan włączenia. W tym stanie system AAOS jest w pełni uruchomiony i wchodzi w interakcję z kierowcą.
  • Wyświetlaczem sterują zasady dotyczące zasilania, a nie wywołania włączania/wyłączania wyświetlacza Androida w przypadku innych formatów.
Przygotowanie do wyłączenia
  • Gdy kierowca przestanie prowadzić, VHAL instruuje AAOS, aby rozpocząć przygotowanie do wyłączenia, które zaczyna się od fazy przygotowania przed wyłączeniem, a następnie przechodzi do fazy przygotowania do wyłączenia. W fazie podstawowej wyświetlacz i dźwięk są wyłączone, a system AAOS nie wchodzi w interakcje z kierowcą. System Android nadal działa i może aktualizować aplikacje oraz system Android. Po zakończeniu aktualizacji system Android przechodzi w stan oczekiwania na zakończenie VHAL.
Poczekaj na zakończenie działania VHAL
  • AAOS informuje VHAL, że można go wyłączyć. Mikrokontroler pojazdu (VMCU) powinien przełączyć układ SoC w tryb głębokiego uśpienia i odłączyć zasilanie od procesora aplikacji. AAOS jest wtedy w stanie STR, ale nie jest wykonywany żaden kod.
  • Jeśli VHAL nie zakończy działania, a kierowca wróci, jednostka główna powinna przejść bezpośrednio do stanu oczekiwania na VHAL.
Suspend-to-RAM (STR)
  • Pojazd i procesor aplikacji są wyłączone, nie jest wykonywany żaden kod, a pamięć RAM procesora aplikacji jest zasilana.
zawieszenie na dysku (STD),
  • Pojazd i procesor aplikacji są wyłączone, nie jest wykonywany żaden kod, a procesor i pamięć RAM procesora aplikacji nie są zasilane.

Jak definiowane są zasady dotyczące zasilania?

Implementujący definiują zasady zasilania w pliku /vendor/etc/automotive/power_policy.xml, który:

  • Definiuje zasady dotyczące zasilania.
  • Definiuje grupy zasad zasilania, które obejmują domyślne zasady zasilania i są automatycznie stosowane, gdy następuje zmiana stanu zasilania.
  • Zastępuje zasady zasilania systemu.

Zasady dotyczące zasilania

Zasady zasilania składają się z zestawu oczekiwanych stanów zasilania komponentów sprzętowych i oprogramowania. AAOS obsługuje te komponenty w zasadach dotyczących zasilania:

AUDIO
MEDIA
DISPLAY
BLUETOOTH
WI-FI
KOMÓRKOWA
ETHERNET
PROJEKCJA
NFC
INPUT
VOICE_INTERACTION
VISUAL_INTERACTION
WYKRYWANIE ZAUFANYCH URZĄDZEŃ
LOKALIZACJA
MIKROFON
PROCESOR

Dostawcy mogą też definiować własne niestandardowe komponenty zasilania do użycia z zasadami 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

Grupa zasad zasilania określa domyślną zasadę zasilania, która ma być automatycznie stosowana przy zmianach stanu zasilania. Dostawcy mogą określić domyślne zasady zasilania dla stanów „Oczekiwanie na VHAL” i „Włączone”.

Domyślna zasada zasilania dla stanu Oczekiwanie na VHAL lub Włączone jest stosowana przy każdym przejściu do tego stanu, w tym po anulowaniu wyłączenia i powrocie Androida do stanu Oczekiwanie na VHAL. Jeśli dla danego stanu w bieżącej grupie zasad zasilania nie zdefiniowano domyślnej zasady zasilania, demon zasad zasilania samochodu stosuje wbudowaną zasadę zasilania. Wyjątkiem jest sytuacja, gdy system jest w trybie cichym: demon zasad zasilania samochodu zapisuje bieżące lub żądane zwykłe zasady zasilania jako oczekujące, blokuje zmiany zwykłych zasad zasilania i stosuje zasady zasilania systemu bez interakcji z użytkownikiem. Zastosowanie zasady dotyczącej zasilania zmienia tylko komponenty, które są objęte zasadą, pozostawiając nieobjęte komponenty w ich obecnym stanie.

Zasady systemowe dotyczące zasilania

AAOS obsługuje 2 zasady zasilania systemu: brak interakcji z użytkownikiem i przygotowanie do zawieszenia. Zasady zasilania systemu są stosowane, gdy urządzenie przechodzi w tryb cichy, tryb garażowy, tryb uśpienia z zapisem w pamięci RAM lub tryb uśpienia z zapisem na dysku.

W poniższych tabelach opisano zachowanie poszczególnych komponentów w ramach systemowych zasad zasilania. Implementujący mogą zastąpić wykrywanie Bluetooth, NFC i zaufanych urządzeń w zasadach zasilania systemu bez interakcji użytkownika. Zastąpienia są stosowane w /vendor/etc/automotive/power_policy.xml.

brak interakcji użytkownika

Sposób działania zasady zasilania systemu brak interakcji użytkownika jest opisany w tej tabeli:

Komponenty Stan zasilania Można konfigurować
Dźwięk 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
Odwzorowanie Wyłączono Nie
NFC Wyłączono Tak
Dane wejściowe Wyłączono Nie
Asystent Wyłączono Nie
Interakcja użytkownika Wyłączono Nie
Wykrywanie zaufanych urządzeń podczas logowania użytkownika Włączono Tak
Lokalizacja Wyłączono Nie
Mikrofon Wyłączono Nie
CPU Włączono Nie

zawieszenie przygotowania

Działanie zasady zasilania systemu przygotowanie do zawieszenia jest opisane w tej tabeli:

Komponenty Stan zasilania Możliwość konfiguracji przez producenta OEM
Dźwięk 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
Odwzorowanie Nie dotyczy Nie
NFC Nie dotyczy Nie
Dane wejściowe Nie dotyczy Nie
Asystent Nie dotyczy Nie
Interakcja użytkownika Nie dotyczy Nie
Wykrywanie zaufanych urządzeń podczas logowania użytkownika Nie dotyczy Nie
Lokalizacja Wyłączono Nie
Mikrofon Wyłączono Nie
CPU Wyłączono Nie

Interakcja z VHAL

Demon zasad zasilania samochodu działający w warstwie systemowej subskrybuje 2 właściwości, aby nasłuchiwać żądań z VHAL:

  • POWER_POLICY_REQ VHAL zapisuje identyfikator zasad zasilania w tej właściwości.
  • POWER_POLICY_GROUP_REQ VHAL zapisuje identyfikator grupy zasad zasilania w tej właściwości.

Bieżące zasady zasilania w systemie mogą być zmieniane przez moduły inne niż VHAL. W takim przypadku demon zasad zasilania samochodu aktualizuje właściwość CURRENT_POWER_POLICY, aby powiadomić VHAL o zmianie.

Interakcja z procesami natywnymi

CarPowerManagementService (CPMS) przekazuje zarządzanie zasadami zasilania do demona zasad zasilania samochodu. Demon jest jedynym źródłem wiarygodnych danych dotyczących zasad zasilania w systemie. Demon zasad zasilania samochodu zarządza stanem zasad zasilania i powiadamia CPMS, VHAL i inne klienty natywne o zmianach.

Demon zasad zasilania samochodu eksportuje interfejsy AIDL do użytku przez HAL i inne procesy natywne. Można ich powiadomić o zmianie nowych zasad zasilania. Inaczej mówiąc, kiedy każde z nich musi zmienić 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.
     * @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 umożliwiające zarządzanie zasadami dotyczącymi zasilania:

  • Pobieranie bieżących zasad zasilania
  • Stosowanie nowych zasad zasilania
  • Ustawianie nowej grupy zasad dotyczących zasilania

Z tych metod mogą korzystać tylko moduły z uprawnieniami systemowymi. Moduły, które mają być informowane o zastosowaniu zasady zasilania, mogą zarejestrować detektor zmian zasad zasilania w CarPowerManager