Implementacja referencyjna

Zapewniamy referencyjną implementację dla AIDL VHAL. Główny wątek usługi jest zaimplementowany w VehicleService.cpp . Implementacja interfejsu VHAL znajduje się w DefaultVehicleHal.cpp .

Implementacja referencyjna oparta jest na architekturze dwuwarstwowej. W wyższej warstwie DefaultVehicleHal implementuje interfejs VHAL AIDL i zapewnia ogólną logikę VHAL dla wszystkich urządzeń sprzętowych. W niższej warstwie FakeVehicleHardware implementuje interfejs IVehicleHardware . Ta klasa symuluje logikę VHAL interakcji z rzeczywistym sprzętem lub magistralą pojazdu i jest specyficzna dla urządzenia. Opcjonalnie dostawcy mogą dostosować tę samą architekturę, ponownie wykorzystać tę samą klasę DefaultVehicleHal (rozszerzając ją w celu nadpisania metody) i zapewnić własną implementację IVehicleHardware .

Implementacja odniesienia VHAL
Rysunek 1. Implementacja referencyjna VHAL

DefaultVehicleHal zawiera następującą logikę, która jest uważana za ogólną i może mieć zastosowanie do dowolnej implementacji VHAL.

  • Implementuje interfejs IVehicle .
  • Wykonuje podstawowe kontrole danych wejściowych, w tym sprawdzanie duplikatów identyfikatorów.
  • Przydziela obiekty klienta (na przykład GetValuesClient ) dla każdej operacji dla każdego klienta powiązania i dodaje je do puli globalnej.
  • Zarządza logiką asynchronicznych wywołań zwrotnych, na przykład dodawaniem oczekujących żądań do puli oczekujących żądań. Rozwiązuje oczekujące żądania po otrzymaniu wyników lub zwraca błąd, gdy upłynie limit czasu jednego z oczekujących żądań.
  • Serializuje i deserializuje LargeParcelable (patrz ParcelableUtils.h ).
  • Zarządza subskrypcją (patrz SubscriptionManager.h ).
  • Sprawdza uprawnienia. (Zobacz funkcje checkReadPermission i checkWritePermission ).
  • Okresowo wywołuje IVehicleHardware.checkHealth i wysyła sygnały pulsu (patrz funkcja checkHealth ).

IVehicleHardware to ogólny interfejs używany do reprezentowania specyficznej dla sprzętu implementacji VHAL. Implementacją referencyjną dla IVehicleHardware jest FakeVehicleHardware , która wykorzystuje mapę w pamięci do przechowywania wartości właściwości i nie komunikuje się z rzeczywistą magistralą pojazdu. Jest przeznaczony do działania na emulatorze i nie ma żadnych zależności specyficznych dla sprzętu. Wdrożenia dostawcy nie mogą używać go w niezmienionej postaci i muszą dodać logikę specyficzną dla autobusu pojazdu.

W systemie Android 14 FakeVehicleHardware odczytuje obsługiwaną konfigurację właściwości w czasie wykonywania podczas inicjalizacji z folderu /vendor/etc/automotive/vhalconfig/ urządzenia, który zawiera plik konfiguracyjny w stylu JSON. Zobacz referencyjny plik README VHAL , aby zapoznać się z formatem pliku konfiguracyjnego i zawartością pliku konfiguracyjnego.

FakeVehicleHardware obsługuje również zastąpienie pliku konfiguracyjnego na potrzeby testów. Jeśli ustawiona jest właściwość systemowa persist.vendor.vhal_init_value_override , używa pliku konfiguracyjnego z folderu /vendor/etc/automotive/vhaloverride/ na urządzeniu w celu zastąpienia istniejącej konfiguracji. Implementacja dostawcy może zastosować podobne podejście, dzięki czemu konfiguracja właściwości obsługiwana przez VHAL nie będzie zakodowana na stałe i będzie można o niej dynamicznie decydować w momencie rozpoczęcia. Po uruchomieniu urządzenia konfiguracja właściwości pojazdu musi być statyczna.