Właściwości pojazdu

Interfejs Vehicle Hardware Abstraction Layer (VHAL) definiuje właściwości, które mogą wdrażać OEM-y, oraz zawiera metadane właściwości (np. czy dana właściwość jest typu int i jakie tryby zmiany są dozwolone). Interfejs VHAL opiera się na dostępie (odczyt, zapis, subskrypcja) do usługi, która jest abstrakcją określonej funkcji.

Interfejsy HAL

VHAL używa tych interfejsów:

  • getAllPropConfigs() generuje (vec<VehiclePropConfig>propConfigs)
    Lista konfiguracji wszystkich właściwości obsługiwanych przez VHAL. Usługa CarService korzysta tylko z obsługiwanych właściwości.
  • getPropConfigs(vec<int32_t> props) generuje (StatusCode status,vec<VehiclePropConfig> propConfigs);
    Zwraca konfigurację wybranych właściwości.
  • set(VehiclePropValue propValue) generuje (StatusCodestatus);
    Przypisz wartość właściwości. Wynik zapisu jest zdefiniowany dla każdej usługi.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) generuje (StatusCode status);
    Rozpocznij monitorowanie zmiany wartości właściwości. W przypadku usługi z podziałem na strefy unsubscribe(IVehicleCallback callback, int32_t propId)generuje (StatusCode status);

VHAL używa tych interfejsów wywołania zwrotnego:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    Powiadomienie o zmianie wartości właściwości pojazdu. Należy to zrobić tylko w przypadku subskrybowanych usług.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Zwraca globalny błąd na poziomie VHAL lub błąd na usługę. Błąd globalny powoduje ponowne uruchomienie HAL, co może prowadzić do ponownego uruchomienia innych komponentów (w tym aplikacji).

Właściwości pojazdu

Właściwości mogą być tylko do odczytu, tylko do zapisu (używane do przekazywania informacji do poziomu VHAL) lub do odczytu i zapisu (obsługa większości właściwości jest opcjonalna). Każda właściwość jest jednoznacznie identyfikowana za pomocą klucza int32 i ma wstępnie zdefiniowany typ (value_type):

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

Właściwość z podziałem na strefy może mieć więcej niż 1 wartość, w zależności od liczby stref obsługiwanych przez tę usługę.

Typy obszarów

VHAL definiuje kilka typów obszarów:

Typ obszaru Opis
GLOBAL Ta usługa jest pojedyncza i nie ma wielu obszarów.
WINDOW Obszar na podstawie okien, używa enum VehicleAreaWindow.
MIRROR Obszar na podstawie luster, używa enum VehicleAreaMirror.
SEAT Obszar na podstawie miejsc, używa enum VehicleAreaSeat.
DOOR Obszar na podstawie drzwi, używa enum VehicleAreaDoor.
WHEEL Pole „Area” (obszar) na podstawie kół, używa enum VehicleAreaWheel.

Każda strefa w danej usłudze musi używać zdefiniowanego wstępnie typu obszaru. Każdy typ obszaru ma zestaw flag bitowych zdefiniowanych w enumeracji dla tego typu. Na przykład obszar SEAT definiuje typy enumeracji VehicleAreaSeat:

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100

Identyfikatory obszarów

Właściwości z podziałem na strefy są adresowane za pomocą identyfikatorów obszarów. Każda usługa podzielona na strefy może obsługiwać co najmniej 1 identyfikator obszaru. Identyfikator obszaru składa się z co najmniej 1 flagi z odpowiedniego typu zbiorczego. Na przykład usługa korzystająca z usługi VehicleAreaSeat może używać tych identyfikatorów obszaru:

Produkt Opis
ROW_1_LEFT | ROW_1_RIGHT Identyfikator obszaru dotyczy obu przednich siedzeń.
ROW_2_LEFT Dotyczy tylko lewego tylnego siedzenia.
ROW_2_RIGHT Dotyczy tylko prawego tylnego siedzenia.

Stan usługi

Każda wartość właściwości ma wartość VehiclePropertyStatus. Wskazuje bieżący stan usługi:

Produkt Opis
AVAILABLE Właściwość jest dostępna, a jej wartość jest prawidłowa.
UNAVAILABLE Wartość obiektu jest obecnie niedostępna. Dane są używane na potrzeby tymczasowo wyłączonych funkcji w obsługiwanej usłudze.
ERROR Coś jest nie tak z tą usługą.

Konfigurowanie usługi

Aby podać informacje o konfiguracji poszczególnych usług, użyj elementu VehiclePropConfig. Informacje te obejmują:

Zmienna Opis
access r, w, rw
changeMode Określa sposób monitorowania usługi: ciągły lub po zmianie.
areaConfigs wartości areaId, minmax.
configArray dodatkowe parametry konfiguracji.
configString Dodatkowe informacje przekazane jako ciąg tekstowy.
minSampleRate maxSampleRate
prop Identyfikator usługi, int

Obsługa właściwości strefy

Usługa podzielona na strefy jest odpowiednikiem kolekcji wielu usług, w których przypadku dostęp do każdej usługi podrzędnej można uzyskać za pomocą określonej wartości identyfikatora obszaru.

  • get wywołanie w przypadku nieruchomości z ograniczeniami zawsze zawiera identyfikator obszaru w żądaniu. W związku z tym zwracana jest tylko bieżąca wartość żądanego identyfikatora obszaru. Jeśli usługa jest globalna, identyfikator obszaru ma wartość 0.
  • set wywołanie w przypadku usługi z podziałem na strefy zawsze zawiera identyfikator strefy w prośbie. Zmienia się więc tylko żądany identyfikator obszaru.
  • subscribe wywołanie generuje zdarzenia dla wszystkich identyfikatorów obszaru usługi.

Połączenia

Podczas inicjalizacji wartość właściwości może być jeszcze niedostępna, ponieważ odpowiednia wiadomość z sieci pojazdów nie została jeszcze odebrana. W takich przypadkach wywołanie get powinno zwrócić -EAGAIN. Niektóre obiekty (np. klimatyzacja) mają oddzielną właściwość włączania i wyłączania zasilania. Wywołanie funkcji get w przypadku takiej właściwości (gdy jest wyłączona) powinno zwrócić stan UNAVAILABLE, a nie błąd. Na przykład: temperatura ogrzewania, wentylacji i klimatyzacji

Przykład wywołania interfejsu VHAL HVAC

Rysunek 1. Pobieranie temperatury ogrzewania/wentylacji/klimatyzacji (CS = CarService, VHAL = Vehicle HAL)

Ustawienia połączeń

W typowej operacji wywołanie set prowadzi do przesłania prośby o zmianę w sieci pojazdu. Wywołanie set to w najlepszym przypadku operacja asynchroniczna, która zwraca wynik możliwie szybko, ale może też być synchroniczna. Niektóre wywołania set mogą wymagać gotowych danych, ale podczas inicjalizacji mogą one być jeszcze niedostępne. W takich przypadkach wywołanie set powinno zwrócić wartość StatusCode#TRY_AGAIN. Niektóre obiekty z oddzielnymi elementami włączania i wyłączania powinny zwracać wartość StatusCode#NOT_AVAILABLE lub StatusCode#NOT_AVAILABLE_DISABLED, gdy obiekt jest wyłączony, a użycie funkcji set nie jest możliwe. Dopóki set nie zacznie obowiązywać, get niekoniecznie zwraca tej samej wartości co ustawiona. Na przykład: set HVAC Temperature.

Przykład ustawienia systemu ogrzewania/wentylacji/klimatyzacji w VHAL

Rysunek 2. Ustawianie temperatury w systemie HVAC (CS = CarService, VHAL = Vehicle HAL)

Obsługa właściwości niestandardowych

Aby zaspokoić potrzeby partnerów, VHAL umożliwia korzystanie z niestandardowych usług, które są ograniczone do aplikacji systemowych. Podczas pracy z własnymi usługami kieruj się tymi wskazówkami:

  • Identyfikator usługi powinien zostać wygenerowany za pomocą tych pól:
    • VehiclePropertyGroup:VENDOR
      Grupa VENDOR jest używana tylko w przypadku usług niestandardowych.
    • VehicleArea
      Wybierz odpowiedni typ obszaru.
    • VehiclePropertyType
      Wybierz odpowiedni typ danych. Typ BYTES umożliwia przekazywanie nieprzetworzonych danych, co w większości przypadków wystarcza. Częste wysyłanie dużych ilości danych za pomocą właściwości niestandardowych może spowolnić dostęp do całej sieci pojazdu. Zachowaj ostrożność podczas dodawania dużej ilości danych.
    • Property ID
      Wybierz 4-bitowy identyfikator właściwości niestandardowej.
  • Aby zapobiec fragmentacji ekosystemu, nie można używać właściwości niestandardowych do powielania właściwości pojazdu, które istnieją już w pakiecie SDK VehiclePropertyIds.
  • Wypełnij pole VehiclePropConfig.configString krótkim opisem usługi niestandardowej. Dzięki temu narzędzia do sprawdzania poprawności mogą zgłaszać przypadkowe powielanie właściwości pojazdu. Na przykład: „stan świateł awaryjnych”.
  • Dostęp przez CarPropertyManager (w przypadku komponentów Java) lub przez interfejs Vehicle Network Service API (w przypadku komponentów natywnych). Nie modyfikuj innych interfejsów API samochodów, ponieważ może to spowodować problemy ze zgodnością w przyszłości.
  • Po zaimplementowaniu właściwości dostawcy wybierz tylko listę uprawnień w enumeracji VehicleVendorPermission dla właściwości dostawcy. Mapowanie uprawnień dostawcy na właściwości systemu spowoduje naruszenie zasad CTS i VTS.

Obsługa właściwości ogrzewania, wentylacji i klimatyzacji

Za pomocą VHAL możesz sterować systemem HVAC, ustawiając właściwości związane z klimatyzacją. Większość właściwości HVAC to właściwości z podziałem na strefy, ale wiele z nich to właściwości bez podziału na strefy (globalne). Przykładowe zdefiniowane właściwości:

Właściwość Cel
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Ustaw temperaturę dla każdej strefy.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Sterowanie recyrkulacją w poszczególnych strefach.

Aby zobaczyć pełną listę właściwości związanych z klimatyzacją, wyszukaj VEHICLE_PROPERTY_HVAC_*types.hal. Gdy usługa HVAC używa VehicleAreaSeat, obowiązują dodatkowe reguły mapowania usługi HVAC z ograniczonym dostępem do identyfikatorów obszarów. Każde dostępne miejsce w samochodzie musi być częścią identyfikatora obszaru w tablicy Area ID.

Przykład 1 Samochód ma 2 przednie fotele (ROW_1_LEFT, ROW_1_RIGHT) i 3 tylne fotele (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Samochód ma 2 urządzenia sterujące temperaturą: po stronie kierowcy i pasażera.

  • Prawidłowy zestaw mapowania identyfikatorów obszarów w przypadku HVAC_TEMPERATURE SET:
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • Alternatywnym mapowaniem dla tej samej konfiguracji sprzętowej jest:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

Przykład 2. Samochód ma 3 rzędy siedzeń: 2 miejsca z przodu (ROW_1_LEFT, ROW_1_RIGHT), 3 miejsca w drugim rzędzie (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) i 3 miejsca w trzecim rzędzie (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Samochód ma 3 urządzenia sterujące temperaturą: po stronie kierowcy, pasażera i z tyłu. Rozsądnym sposobem mapowania HVAC_TEMPERATURE_SET na identyfikatory obszarów jest tablica o 3 elementach:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

Obsługa właściwości czujnika

Właściwości czujnika VHAL reprezentują rzeczywiste dane czujnika lub informacje o zasadach, takie jak stan jazdy. Niektóre informacje z czujników (np. stan jazdy i tryb dzień/noc) są dostępne dla wszystkich aplikacji bez ograniczeń, ponieważ są one wymagane do tworzenia bezpiecznych aplikacji do pojazdów. Inne informacje z czujników (np. prędkość pojazdu) są bardziej poufne i wymagają określonych uprawnień, którymi użytkownicy mogą zarządzać.

Zobacz obsługiwane właściwości czujnika (w types.hal).

usługa map dla pojazdów

Usługa map dla pojazdów (VMS) zapewnia mechanizm wymiany danych mapy między klientami za pomocą interfejsu pub/sub, aby obsługiwać typowe funkcje pojazdu, takie jak zaawansowane systemy wspomagania kierowcy (ADAS). Klienci mogą obejmować systemy pojazdów, które komunikują się z usługą VMS w VHAL lub uprzywilejowanych aplikacjach na Androida. Dane udostępniane w VMS mają być ograniczone do danych mapowych przeznaczonych do użytku przez systemy pojazdu i aplikacje pomocnicze.

VMS jest przeznaczony tylko do stosowania w implementacjach Androida Automotive. AOSP nie zawiera klientów domyślnych, które publikują ani subskrybują VMS. W przypadku usługi VMS w VHAL typy wiadomości i struktury danych są opisane w VHAL 2.0 w elemencie zbioru VmsMessageType, który zawiera listę typów obsługiwanych wiadomości VMS. Ten enumerant jest używany jako pierwsza liczba całkowita w tablicy liczb całkowitych właściwości pojazdu i określa, jak jest dekodowana reszta wiadomości.