Polityka zasilania

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:

Diagram stanu zasilania AAOS

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
  • Kiedy kierowca wchodzi w interakcję z pojazdem (na przykład otwierając drzwi), VMCU zasila AP, czyli pamięć. i urządzenia peryferyjne.
  • AAOS przechodzi z jednego z trzech stanów (Off, Suspend-to-RAM (STR, Wait for VHAL Finish), a następnie przechodzi w tryb oczekiwania na VHAL, gdzie oczekuje na koordynację z VHAL.
NA
  • VHAL instruuje AAOS, aby przeszedł w stan włączenia. W tym stanie AAOS jest w pełni uruchomiony i współpracuje ze sterownikiem.
  • Wyświetlacz jest kontrolowany przez zasady zasilania, a nie przez wywołania włączania/wyłączania wyświetlacza Androida w przypadku innych obudów.
Przygotowanie do zamknięcia
  • Kiedy kierowca zatrzyma jazdę, VHAL instruuje AAOS, aby przeszedł w tryb przygotowania do zamknięcia. W tym stanie wyświetlacz i dźwięk są wyłączone, a system AAOS nie współpracuje ze sterownikiem. System Android nadal działa i może aktualizować aplikacje oraz system Android. Po zakończeniu aktualizacji (jeśli istnieją) system Android przejdzie w tryb oczekiwania na zakończenie VHAL.
Poczekaj, aż VHAL zakończy
  • AAOS informuje VHAL, że można go wyłączyć. Oczekuje się, że moduł mikrokontrolera pojazdu (VMCU) przełączy system-on-chip (SoC) w tryb głębokiego uśpienia i odetnie zasilanie od punktu dostępowego. AAOS znajduje się wówczas w stanie STR, chociaż nie jest wykonywany żaden kod.
  • Jeżeli VHAL nie zakończy się i kierowca powróci, jednostka główna (HU) powinna przejść bezpośrednio do trybu oczekiwania na VHAL.
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 .