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 strefyunsubscribe(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 , min i max . |
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
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
.
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
GrupaVENDOR
jest używana tylko w przypadku usług niestandardowych.VehicleArea
Wybierz odpowiedni typ obszaru.VehiclePropertyType
Wybierz odpowiedni typ danych. TypBYTES
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_*
w 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.