Zarządzanie zasilaniem

Aby obsługiwać zarządzanie energią w przypadku konkretnych pojazdów, Android udostępnia CarPowerManagementServiceusługę i CarPowerManagerinterfejs.

Zmiany stanu są wywoływane przez główną jednostkę sterującą pojazdu (VMCU). Aby komunikować się z VMCU, integratorzy muszą wdrożyć kilka komponentów. Integratorzy odpowiadają za integrację z warstwą abstrakcji sprzętu pojazdu (VHAL) i implementacją jądra. Integratorzy są też odpowiedzialni za wyłączanie źródeł wybudzania i zapewnienie, że wyłączenia nie są odkładane w nieskończoność.

Terminologia

W tym dokumencie używamy tych terminów:

procesor aplikacji (AP)
 Część układu SOC.
Pakiet wsparcia platformy (BSP)
Warstwa oprogramowania, która zawiera oprogramowanie rozruchowe i sterowniki urządzeń specyficzne dla sprzętu, umożliwiające działanie wbudowanego systemu operacyjnego w danym środowisku sprzętowym (płyta główna), zintegrowana z wbudowanym systemem operacyjnym.
CarPowerManager (CPM)
Udostępnia interfejs API, który umożliwia aplikacjom rejestrowanie się w celu otrzymywania powiadomień o zmianach stanu zasilania.
CarPowerManagementService (CPMS)
Koordynuje przejścia między stanami zasilania, komunikuje się z VHAL w celu sterowania stanem zasilania i wykonuje końcowe wywołania wstrzymania i wyłączenia.
CarPowerPolicyDaemon (CPPD)
Zarządza zasadami dotyczącymi zasilania i udostępnia interfejsy AIDL, aby procesy natywne mogły rejestrować odbiorniki zasad dotyczących zasilania.
ogólnego przeznaczenia wejście/wyjście (GPIO),
Cyfrowe złącze sygnałowe do użytku ogólnego.
warstwa abstrakcji sprzętowej (HAL)
Warstwa oprogramowania, z którą wszystkie inne moduły wyższego poziomu muszą wchodzić w interakcję, aby uzyskać dostęp do funkcji sprzętowych.
hibernować,
Znany też jako hibernacja (S2D/S4). Układ SoC przechodzi w tryb zasilania S4 (hibernacja), a zawartość pamięci RAM jest zapisywana na nośniku nietrwałym (np. pamięci flash lub dysku). Cały system jest wyłączany.
procesor multimediów (MP),
 Zobacz układ SOC.
układ scalony zarządzania energią (PMIC),
Układ używany do zarządzania wymaganiami dotyczącymi zasilania systemu hosta.
układ SOC
Główny procesor, który obsługuje AAOS. Zwykle jest dostarczany przez producentów takich jak Intel, MediaTek, Nvidia, Qualcomm, Renesas i Texas Instruments.
zawieś
Znany też jako zawieszenie do pamięci RAM (S2R lub STR). Układ SoC przechodzi w tryb zasilania S3, a procesor jest wyłączany, podczas gdy pamięć RAM pozostaje włączona.
Interfejs HAL pojazdu (VHAL)
Interfejs Android API używany do komunikacji z siecią pojazdu. Za napisanie tego modułu odpowiada partner poziomu 1 lub producent OEM. Sieć pojazdu może korzystać z dowolnej warstwy fizycznej (np. CAN, LIN, MOST i Ethernet). VHAL abstrahuje tę sieć pojazdu, aby umożliwić AAOS interakcję z pojazdem.
Procesor interfejsu pojazdu (VIP)
Zobacz MCU pojazdu.
Główny moduł sterujący pojazdu (VMCU)
Mikrokontroler, który zapewnia interfejs między siecią pojazdu a układem SoC. Układ SoC komunikuje się z VMCU za pomocą sygnałów USB, UART, SPI i GPIO.

Projekt systemu

W tej sekcji opisujemy, jak AAOS reprezentuje stan zasilania procesora aplikacji i które moduły implementują system zarządzania zasilaniem. Opisuje też, jak te moduły współpracują ze sobą i jak zwykle przebiegają przejścia między stanami.

Stan zasilania samochodu

AAOS używa automatu stanów do reprezentowania stanu zasilania procesora aplikacji. Automat stanowy udostępnia stany przedstawione poniżej:

Automat stanów zasilania samochodu

Rysunek 1. Automat stanu zasilania samochodu.

Najczęstsze przejścia są wyróżnione na niebiesko. Oto stany i typowy przebieg:

  • Wstrzymanie do pamięci RAM Pojazd i SoC są wyłączone. Nie jest wykonywany żaden kod. Pamięć RAM SoC jest zasilana.
  • Poczekaj na VHAL. Gdy kierowca wejdzie w interakcję z pojazdem, np. otworzy drzwi, VMCU włączy zasilanie SoC. AAOS wznowi działanie z trybu zawieszenia do pamięci RAM i przejdzie do stanu oczekiwania na VHAL, w którym będzie czekać na koordynację z VHAL.
  • Włączone VHAL informuje AAOS, że ma przejść w stan włączony. W tym stanie AAOS działa w pełni i wchodzi w interakcje z kierowcą.
  • Przygotowanie do wyłączenia Gdy kierowca skończy jazdę, VHAL informuje AAOS o wejściu w fazę przygotowania do wyłączenia, wysyłając SHUTDOWN_PREPARE. W tym stanie detektory zmian stanu zasilania otrzymują wartość STATE_PRE_SHUTDOWN_PREPARE. Jest to wczesne ostrzeżenie o rozpoczęciu wyłączania.
  • Przygotowanie do wyłączenia Gdy wszyscy odbiorcy zakończą działanie lub upłynie limit czasu przygotowania do wyłączenia, system Android przechodzi do głównej fazy przygotowania do wyłączenia, powiadamiając odbiorców za pomocą STATE_SHUTDOWN_PREPARE. Wyświetlacz i dźwięk są wyłączone, a AAOS nie wchodzi w interakcję z kierowcą. System Android nadal działa i może wykonywać operacje czyszczenia i aktualizacji, takie jak uruchamianie trybu garażowego.
  • Poczekaj na zakończenie VHAL. W tym momencie AAOS informuje VHAL, że jest gotowy do wyłączenia. Oczekuje się, że VMCU przełączy SoC w tryb głębokiego uśpienia i odłączy zasilanie procesora aplikacji. AAOS przechodzi wtedy w stan zawieszenia do pamięci RAM, ale nie jest wykonywany żaden kod.

Moduły zarządzania zasilaniem

System zarządzania energią składa się z tych modułów:

Nazwa modułu Opis
CarPowerManager interfejs API w języku Java lub C++;
CarPowerManagementService Koordynuje przejścia między stanami zasilania i przekazuje zarządzanie zasadami zasilania do demona CarPowerPolicyDaemon.
CarPowerPolicyDaemon Zarządza zasadami zasilania i komunikuje się z klientami natywnych zasad zasilania.
Interfejs HAL pojazdu Interfejs do VMCU.
Bąbelki Implementacja zawieszenia do pamięci RAM lub na dysk.

Funkcja głębokiego uśpienia/hibernacji (zawieszanie Androida w pamięci RAM lub na dysku) jest zaimplementowana w jądrze. Ta funkcja jest udostępniana w przestrzeni użytkownika jako specjalny plik znajdujący się w lokalizacji /sys/power/state. AAOS jest zawieszany przez zapisanie w tym pliku znaku mem lub disk.

CPMS koordynuje stan zasilania z innymi usługami i warstwami HAL. CPMS implementuje opisany powyżej automat stanów i wysyła powiadomienia do każdego obserwatora, gdy następuje przejście do innego stanu zasilania. Ta usługa używa też VHAL do wysyłania wiadomości do sprzętu.

CPPD jest wiarygodnym źródłem informacji o zasadach dotyczących zasilania. Zarządza zasadami zasilania w całym cyklu życia urządzenia i powiadamia CPMS, VHAL i inne natywne odbiorniki o zmianach zasad zasilania. CPMS przekazuje żądania zmiany zasad zasilania do CPPD.

CPMS komunikuje się z VMCU, odczytując i zapisując właściwości VHAL związane ze stanem zasilania, takie jak AP_POWER_STATE_REQAP_POWER_STATE_REPORT. Aplikacje mogą używać interfejsu zdefiniowanego w CPM do monitorowania zmian stanu zasilania. Ten interfejs umożliwia też aplikacjom rejestrowanie odbiorców zasad dotyczących zasilania. Ten interfejs API w języku Java jest oznaczony adnotacjami @SystemApi@hide, co oznacza, że jest dostępny tylko dla aplikacji z uprawnieniami. Zależności między tymi modułami, aplikacjami i usługami zostały zilustrowane poniżej:

Schemat komponentów zasilania

Rysunek 2. Schemat komponentów zasilania.

Sekwencja wiadomości

W poprzedniej sekcji opisaliśmy moduły, z których składa się system zarządzania energią. W tej sekcji na przykładach enter deep sleepexit deep sleep wyjaśniamy, jak moduły i aplikacje komunikują się ze sobą:

Przejście w sen głęboki

Tylko VMCU może zainicjować sen głęboki. Po rozpoczęciu snu głębokiego VMCU wysyła powiadomienie do CPMS za pomocą VHAL. CPMS zmienia stan na SHUTDOWN PREPARE i przesyła tę zmianę stanu do wszystkich obserwatorów (aplikacji i usług, które monitorują CPMS), wywołując metodę onStateChanged() z nowym identyfikatorem stanu dostarczonym przez CPM.

CPM pośredniczy między aplikacjami/usługami a CPMS. Metoda onStateChanged() aplikacji lub usług jest wywoływana synchronicznie w metodzie onStateChanged() CPM. Większość aplikacji i usług musi zakończyć przygotowania przed powrotem z tego wywołania. Usługi uprzywilejowane mogą kontynuować przygotowania asynchronicznie po powrocie do stanu PRE_SHUTDOWN_PREPARE, SUSPEND_ENTER, POST_SUSPEND_ENTER. W tym przypadku usługa uprzywilejowana powinna wywołać funkcję complete() na podanym obiekcie CompletablePowerStateChangeFuture po zakończeniu przygotowania. Pamiętaj, że przygotowanie asynchroniczne nie jest dozwolone w przypadkuSHUTDOWN_PREPARE. Zanim DEEP_SLEEP_ENTRY zostanie wysłany do VHAL, CPMS okresowo wysyła do VHAL żądania odroczenia wyłączenia.

Gdy wszystkie obiekty CPM zakończą przygotowania do wyłączenia, CPMS wysyła do VHAL sygnał AP_POWER_STATE_REPORT, który następnie powiadamia VMCU, że AP jest gotowy do zawieszenia. CPMS wywołuje też metodę zawieszania, która zawiesza jądro.

Opisana powyżej sekwencja jest zilustrowana poniżej:

Przejście w sen głęboki

Rysunek 3. Przejdź w stan głębokiego snu.

Interfejsy programowania udostępniane przez CPM

W tej sekcji opisano interfejs Java API udostępniany przez CPM na potrzeby aplikacji i usług systemowych. Ten interfejs API umożliwia oprogramowaniu systemowemu:

  • Monitorowanie zmian stanu zasilania punktu dostępu.
  • Stosowanie zasad zasilania.

Aby wywołać interfejsy API udostępniane przez CPM, wykonaj te czynności:

  1. Aby uzyskać instancję CPM, wywołaj interfejs Car API.
  2. Wywołaj odpowiednią metodę na obiekcie utworzonym w kroku 1.

Tworzenie obiektu CarPowerManager

Aby utworzyć obiekt CPM, wywołaj metodę getCarManager() obiektu Car. Ta metoda jest fasadą używaną do tworzenia obiektów CPM. Określ android.car.Car.POWER_SERVICE jako argument, aby utworzyć obiekt CPM.

Car car = Car.createCar(this);
CarPowerManager powerManager =
  (CarPowerManager) car.getCarManager(android.car.Car.POWER_SERVICE);

CarPowerStateListener i rejestracja

Aplikacje i usługi systemowe mogą otrzymywać powiadomienia o zmianach stanu zasilania, implementując CarPowerManager.CarPowerStateListener. Ten interfejs definiuje jedną metodę onStateChanged(), która jest funkcją wywołania zwrotnego wywoływaną, gdy zmienia się stan zasilania CPMS. W przykładzie poniżej zdefiniowano nową klasę anonimową, która implementuje interfejs:

private final CarPowerManager.CarPowerStateListener powerListener =
  new CarPowerManager.CarPowerStateListener () {
    @Override
     public void onStateChanged(int state) {
       Log.i(TAG, "onStateChanged() state = " + state);
     }
};

Aby poinstruować ten obiekt nasłuchujący, aby monitorował przejście stanu zasilania, utwórz nowy wątek wykonawczy i zarejestruj nasłuchującego oraz ten wątek w obiekcie CPM:

executor = new ThreadPerTaskExecutor();
powerManager.setListener(powerListener, executor);

Gdy stan zasilania ulegnie zmianie, metoda onStateChanged() obiektu nasłuchującego zostanie wywołana z wartością reprezentującą nowy stan zasilania. Powiązanie między rzeczywistą wartością a stanem zasilania jest zdefiniowane w CarPowerManager i przedstawione w tej tabeli:

Nazwa Opis
STATE_ON Wpisz stan włączenia. System jest w pełni sprawny.
STATE_SHUTDOWN_CANCELLED Zamykanie zostanie anulowane, a stan zasilania wróci do normalnego stanu.
STATE_SHUTDOWN_ENTER aplikacje powinny zwolnić miejsce i być gotowe do wyłączenia.
STATE_POST_SHUTDOWN_ENTER Przygotowania do wyłączenia zostały zakończone i VMCU jest gotowy do wyłączenia. Wprowadź stan wyłączenia.
STATE_PRE_SHUTDOWN_PREPARE Proces wyłączania został zainicjowany, ale CPMS jeszcze go nie rozpoczął. Wyświetlacz i dźwięk są nadal włączone
STATE_SHUTDOWN_PREPARE W tym okresie może być włączony tryb garażowy.
STATE_SUSPEND_ENTER aplikacje powinny zostać wyczyszczone i przygotowane do przejścia w stan wstrzymania do pamięci RAM.
STATE_POST_SUSPEND_ENTER Przygotowania do przejścia w stan wstrzymania do pamięci RAM zostały zakończone, a VMCU jest gotowy do przejścia w ten stan. Wprowadź stan wstrzymania.
STATE_SUSPEND_EXIT Wybudzanie z zawieszenia lub wznawianie działania po anulowaniu zawieszenia.
STATE_HIBERNATION_ENTER aplikacje powinny zwolnić miejsce i przygotować się do hibernacji.
STATE_POST_HIBERNATION_ENTER Przygotowania do hibernacji zostały zakończone, a VMCU jest gotowy do przejścia w stan hibernacji.
STATE_HIBERNATION_EXIT Wznawianie działania po hibernacji lub po anulowaniu hibernacji.
STATE_WAIT_FOR_VHAL System uruchamia się, ale czeka na nawiązanie komunikacji z VHAL, zanim przejdzie w stan ON.

Wyrejestrowanie CarPowerStateListener

Aby wyrejestrować wszystkie obiekty detektora zarejestrowane w CPM, wywołaj metodę clearListener:

powerManager.clearListener();

Integracja systemów w implementacji na Androida

Integratorzy odpowiadają za:

  • Implementowanie interfejsu jądra w celu zawieszenia Androida.
  • Implementowanie funkcji VHAL w celu:
    • Przekazywanie informacji o rozpoczęciu wstrzymania lub wyłączenia z samochodu do Androida.
    • Wysyłanie z Androida do samochodu wiadomości o gotowości do wyłączenia.
    • Inicjowanie wyłączenia lub wstrzymania Androida za pomocą interfejsu jądra Linuksa.
  • Sprawdź, czy wszystkie źródła wybudzania są wyłączone, gdy urządzenie jest w stanie wstrzymania.
  • Upewnij się, że aplikacje wyłączają się wystarczająco szybko, aby nie odraczać w nieskończoność procesu wyłączania.
  • Upewnij się, że pakiet BSP włącza (lub wyłącza) komponenty urządzenia zgodnie z zasadami zasilania, aby nie blokować zawieszenia ani hibernacji.

Interfejs jądra: /sys/power/state

AAOS przełącza urządzenie w tryb zawieszenia, gdy aplikacja lub usługa zapisuje w pliku znajdującym się w lokalizacji /sys/power/state wartość mem (w przypadku zawieszenia do pamięci RAM) lub disk (w przypadku zawieszenia do pamięci dyskowej). Integrator musi udostępnić funkcję, która monitoruje ten plik i przełącza system Linux w stan wstrzymania. Ta funkcja może wysłać sygnał GPIO do VMCU, aby powiadomić VMCU, że urządzenie zostało całkowicie wyłączone. Integrator odpowiada też za wyeliminowanie wszelkich warunków wyścigu między wysłaniem przez VHAL ostatecznej wiadomości do VMCU a przejściem systemu w tryb zawieszenia lub wyłączenia.

Odpowiedzialność VHAL

VHAL zapewnia interfejs między siecią pojazdu a Androidem. VHAL:

  • Przekazuje do Androida sygnał o rozpoczęciu wstrzymania lub wyłączenia z samochodu.
  • Wysyła z Androida do samochodu wiadomość o gotowości do wyłączenia.
  • Inicjuje wyłączenie lub zawieszenie Androida za pomocą interfejsu jądra Linuksa.

Gdy CPMS poinformuje VHAL, że jest gotowy do wyłączenia, VHAL wyśle do VMCU komunikat shutdown ready. Zwykle urządzenia peryferyjne na chipie, takie jak UART, SPI i USB, przesyłają wiadomość. Po wysłaniu wiadomości CPMS wywołuje polecenie jądra, aby zawiesić lub wyłączyć urządzenie. Przed tym VHAL lub BSP może przełączyć GPIO, aby poinformować VMCU, że można bezpiecznie odłączyć zasilanie urządzenia.

VHAL musi obsługiwać te właściwości, które kontrolują zarządzanie energią za pomocą VHAL:

Nazwa Opis
AP_POWER_STATE_REPORT Android zgłasza przejścia stanów do VMCU za pomocą tej właściwości, używając wartości wyliczeniowych VehicleApPowerStateReport.
AP_POWER_STATE_REQ VMCU używa tej właściwości, aby poinstruować Androida, aby przełączył się na różne stany zasilania, używając wartości wyliczeniowych VehicleApPowerStateReq.

AP_POWER_STATE_REPORT

Użyj tej właściwości, aby zgłosić bieżący stan zarządzania energią na Androidzie. Ta właściwość zawiera 2 liczby całkowite:

  • int32Values[0]: wyliczenie VehicleApPowerStateReport bieżącego stanu.
  • int32Values[1]: czas w milisekundach, o który należy odłożyć, uśpić lub wyłączyć urządzenie. Znaczenie tej wartości zależy od pierwszej wartości.

Pierwsza wartość może mieć jedną z tych wartości: VehicleApPowerStateReport.aidl zawiera bardziej szczegółowe opisy, które są przechowywane w hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle.

Nazwa wartości Opis Druga wartość
WAIT_FOR_VHAL AP uruchamia się i musi nawiązać komunikację z VHAL.
DEEP_SLEEP_ENTRY Punkt dostępu przechodzi w stan głębokiego uśpienia. Po upływie czasu określonego w drugiej wartości VMCU powinien ponownie włączyć AP. Musi być ustawiony
DEEP_SLEEP_EXIT Procesor aplikacji wychodzi ze stanu głębokiego uśpienia.
HIBERNATION_ENTRY AP przechodzi w stan hibernacji. Po upływie czasu określonego w drugiej wartości VMCU powinien ponownie włączyć AP. Musi być ustawiony
HIBERNATION_EXIT Punkt dostępu wychodzi ze stanu hibernacji.
SHUTDOWN_POSTPONE Android nie jest gotowy do wyłączenia. VMCU powinien odczekać czas określony w drugiej wartości przed wyłączeniem AP. Android może poprosić o dodatkowe odroczenie, wysyłając kolejne raporty SHUTDOWN_POSTPONE. Musi być ustawiony
SHUTDOWN_PREPARE Android przygotowuje się do wyłączenia. Musi być ustawiony
SHUTDOWN_START Punkt dostępu jest gotowy do wyłączenia. VMCU powinien ponownie włączyć AP po upływie czasu określonego w drugiej wartości. (VMCU nie musi obsługiwać funkcji włączania z opóźnieniem). Musi być ustawiony
SHUTDOWN_CANCELLED Android przestaje przygotowywać się do wyłączenia i przechodzi do stanu WAIT_FOR_VHAL.
WŁ. Android działa normalnie.

Stan może być ustawiany autonomicznie lub w odpowiedzi na żądanie za pomocą VMCU.

AP_POWER_STATE_REQ

Ta właściwość jest wysyłana przez VMCU, aby przełączyć Androida w inny stan zasilania. Zawiera 2 liczby całkowite:

  • int32Values[0]: wartość typu wyliczeniowego VehicleApPowerStateReq, która reprezentuje nowy stan, do którego ma nastąpić przejście.
  • int32Values[1]: wartość wyliczeniowa VehicleApPowerStateShutdownParam. Ta wartość jest wysyłana tylko w przypadku wiadomości SHUTDOWN_PREPARE i przekazuje do Androida zawarte w niej opcje.

Pierwsza wartość całkowita reprezentuje nowy stan, do którego ma przejść Android. Semantyka jest zdefiniowana w VehicleApPowerStateReq.aidl i podana poniżej:

Nazwa wartości Opis
WŁ. AP powinien rozpocząć pełną pracę.
SHUTDOWN_PREPARE Punkt dostępu powinien przygotować się do wyłączenia. Druga wartość wskazuje, czy punkt dostępu może odłożyć wyłączenie i czy powinien oczekiwać wyłączenia zasilania lub przejścia w sen głęboki.
CANCEL_SHUTDOWN Punkt dostępu powinien przestać przygotowywać się do wyłączenia i zacząć przygotowywać się do włączenia.
ZAKOŃCZ Punkt dostępu zostanie teraz wyłączony lub zawieszony.

VehicleApPowerStateShutdownParam jest zdefiniowany w VehicleApPowerStateShutdownParam.aidl. Ten wyliczenie ma te elementy:

Nazwa wartości Opis
CAN_SLEEP Punkt dostępu może przejść w stan głębokiego uśpienia zamiast całkowicie się wyłączyć. Przekładanie jest dozwolone.
CAN_HIBERNATE AP może przejść w stan hibernacji zamiast całkowicie się wyłączyć. Przekładanie jest dozwolone.
SHUTDOWN_ONLY Punkt dostępu powinien się wyłączyć. Przekładanie jest dozwolone. Sen głęboki jest niedozwolony.
SLEEP_IMMEDIATELY AP może przejść w stan głębokiego uśpienia, ale musi natychmiast przejść w stan uśpienia lub wyłączyć się. Przekładanie terminów jest niedozwolone.
HIBERNATE_IMMEDIATELY AP może przejść w stan wstrzymania na dysku, ale musi natychmiast przejść w stan hibernacji lub wyłączyć się. Przekładanie terminów jest niedozwolone.
SHUTDOWN_IMMEDIATELY Punkt dostępu musi zostać natychmiast wyłączony. Przekładanie nie jest dozwolone. Sen głęboki jest niedozwolony.

Źródła wybudzania

Gdy urządzenie jest w trybie zawieszenia, integrator musi wyłączyć odpowiednie źródła wybudzania. Typowe źródła wybudzania to bicie serca, modem, Wi-Fi i Bluetooth. Jedynym prawidłowym źródłem wybudzania musi być przerwanie z VMCU, które wybudza SoC. Zakłada się, że VMCU może nasłuchiwać modemu pod kątem zdarzeń zdalnego wybudzania (takich jak zdalne uruchomienie silnika). Jeśli ta funkcja jest przekazywana do procesora aplikacji, należy dodać kolejne źródło wybudzania, aby obsługiwać modem.

Aplikacje

Producenci OEM muszą pisać aplikacje w taki sposób, aby można je było szybko wyłączyć i nie opóźniać procesu w nieskończoność.

Dodatek

Katalogi w drzewie kodu źródłowego

Treść Katalog
kod związany z CarPowerManager. packages/services/Car/car-lib/src/android/car/hardware/power
CarPowerManagementService itp. packages/services/Car/service/src/com/android/car/power
usługi związane z VHAL, takie jak VehicleHalHAlClient; packages/services/Car/service/src/com/android/car/hal
Interfejs VHAL i definicje właściwości. hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle/
Przykładowa aplikacja, która daje wyobrażenie o usłudze CarPowerManager packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink

Diagram klas

Ten diagram klas przedstawia klasy i interfejsy Javy w systemie zarządzania energią:

Diagram klas zasilania

Rysunek 4. Diagram klasy mocy.

Relacja między obiektami

Rysunek 5 pokazuje, które obiekty mają odwołania do innych obiektów. Krawędź oznacza, że obiekt źródłowy zawiera odwołanie do obiektu docelowego. Na przykład VehicleHAL ma odwołanie do obiektu PropertyHalService.

Diagram odniesień do obiektów

Rysunek 5. Diagram referencyjny obiektu.