Interfejs warstwy abstrakcji sprzętu pojazdu (VHAL) definiuje właściwości, które mogą zaimplementować producenci OEM, i zawiera metadane właściwości (na przykład, czy właściwość jest int i jakie tryby zmiany są dozwolone). Interfejs VHAL opiera się na dostępie (odczyt, zapis, subskrypcja) właściwości, która jest abstrakcją dla określonej funkcji.
Interfejsy HAL
VHAL wykorzystuje następujące interfejsy:
-
getAllPropConfigs()
generuje(vec<VehiclePropConfig>propConfigs)
Wyświetl konfigurację wszystkich właściwości obsługiwanych przez VHAL. CarService używa tylko obsługiwanych właściwości. -
getPropConfigs(vec<int32_t> props)
generuje(StatusCode status,vec<VehiclePropConfig> propConfigs);
Zwróć konfigurację wybranych właściwości. -
set(VehiclePropValue propValue)
generuje(StatusCodestatus);
Wpisz wartość do właściwości. Wynik zapisu jest definiowany według właściwości. -
subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
generuje(StatusCode status);
Rozpocznij monitorowanie zmiany wartości właściwości. W przypadku właściwości strefowejunsubscribe(IVehicleCallback callback, int32_t propId)
(stan kodu(StatusCode status);
VHAL wykorzystuje następujące interfejsy wywołań zwrotnych:
-
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
Powiadamia o zmianie wartości właściwości pojazdu. Należy to zrobić tylko w przypadku subskrybowanych właściwości. -
oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
Zwróć globalny błąd na poziomie VHAL lub błąd na właściwość. Błąd globalny powoduje ponowne uruchomienie warstwy 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 przez klucz int32 i ma predefiniowany typ ( value_type
):
-
BYTES
-
BOOLEAN
-
EPOCH_TIME
-
FLOAT
-
FLOAT[]
-
INT32
-
INT32[]
-
INT64
-
INT64[]
-
STRING
-
MIXED
Właściwość strefowa może mieć więcej niż jedną wartość na podstawie liczby stref obsługiwanych przez tę usługę.
Typy obszarów
VHAL definiuje wiele typów obszarów:
Typ obszaru | Opis |
---|---|
GLOBAL | Ta właściwość jest singletonem i nie ma wielu obszarów. |
WINDOW | Obszar oparty na oknach, używa wyliczenia VehicleAreaWindow . |
MIRROR | Obszar oparty na lustrach, wykorzystuje enum VehicleAreaMirror . |
SEAT | Obszar oparty na siedzeniach, używa wyliczenia VehicleAreaSeat . |
DOOR | Obszar oparty na drzwiach, wykorzystuje wyliczenie VehicleAreaDoor . |
WHEEL | Obszar oparty na kołach, wykorzystuje wyliczenie VehicleAreaWheel . |
Każda właściwość strefowa musi korzystać ze wstępnie zdefiniowanego typu powierzchni. Każdy typ obszaru ma zestaw flag bitowych zdefiniowanych w wyliczeniu dla typu obszaru. Na przykład obszar SEAT
definiuje 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 obszaru
Usługi strefowe są adresowane za pomocą identyfikatorów obszarów. Każda nieruchomość strefowa może obsługiwać jeden lub więcej identyfikatorów obszaru. Identyfikator obszaru składa się z co najmniej jednej flagi z odpowiedniego wyliczenia. Na przykład nieruchomość korzystająca z VehicleAreaSeat
może używać następujących identyfikatorów obszaru:
Przedmiot | 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. |
Status nieruchomości
Każda wartość właściwości ma wartość VehiclePropertyStatus
. Wskazuje aktualny stan nieruchomości:
Przedmiot | Opis |
---|---|
AVAILABLE | Właściwość jest dostępna, a wartość jest prawidłowa. |
UNAVAILABLE | Wartość nieruchomości jest obecnie niedostępna. Używany do przejściowo wyłączonych funkcji obsługiwanej usługi. |
ERROR | Coś jest nie tak z tą własnością. |
Konfiguracja właściwości
Użyj VehiclePropConfig
, aby podać informacje o konfiguracji dla każdej właściwości. Informacje obejmują:
Zmienny | Opis |
---|---|
access | r , w , rw |
changeMode | Reprezentuje sposób monitorowania właściwości w przypadku zmiany w porównaniu z ciągłą. |
areaConfigs | areaId , min i max wartości. |
configArray | Dodatkowe parametry konfiguracyjne. |
configString | Dodatkowe informacje przekazywane w postaci ciągu. |
minSampleRate | maxSampleRate |
prop | Identyfikator nieruchomości, wewn |
Obsługa właściwości strefy
Właściwość strefowa jest równoważna zbiorowi wielu właściwości, w których do każdej podwłaściwości można uzyskać dostęp z określoną wartością identyfikatora obszaru.
-
get
call for zoned property zawsze zawiera identyfikator obszaru w żądaniu. Dlatego zwracana jest tylko bieżąca wartość dla żądanego identyfikatora obszaru. Jeśli właściwość jest globalna, identyfikator obszaru wynosi 0. -
set
call for zoned property zawsze zawiera identyfikator obszaru w żądaniu. Dlatego zmieniany jest tylko żądany identyfikator obszaru. - wywołanie
subscribe
generuje zdarzenia dla wszystkich identyfikatorów obszaru dla nieruchomości.
Odbieraj połączenia
Podczas inicjalizacji wartość właściwości może być jeszcze niedostępna, ponieważ nie odebrano jeszcze odpowiedniego komunikatu sieci pojazdu. W takich przypadkach wywołanie get
powinno zwrócić -EAGAIN
. Niektóre właściwości (takie jak HVAC) mają oddzielną właściwość włączania/wyłączania zasilania. Wywołanie get
dla takiej właściwości (gdy jest wyłączone) powinno zwrócić status UNAVAILABLE
zamiast zwracać błąd. Na przykład uzyskaj temperaturę HVAC
Rysunek 1 . Uzyskaj temperaturę HVAC (CS = CarService, VHAL = Pojazd HAL)
Ustaw połączenia
Wywołanie set
jest operacją asynchroniczną obejmującą powiadomienie o zdarzeniu po dokonaniu żądanej zmiany. W typowej operacji wywołanie set
prowadzi do złożenia wniosku o zmianę w sieci pojazdu. Niektóre wywołania set
mogą wymagać gotowości danych początkowych, ale podczas inicjalizacji takie dane mogą jeszcze nie być dostępne. W takich przypadkach set
wywołanie powinno zwrócić -EAGAIN
. Niektóre właściwości z osobnym włączaniem/wyłączaniem zasilania powinny zwracać -ESHUTDOWN
, gdy właściwość jest wyłączona i nie można jej wykonać. Dopóki set
nie zostanie wprowadzony w życie, get
niekoniecznie zwraca tę samą wartość, co ustawiona. Na przykład set HVAC Temperature
.
Rysunek 2 . Ustaw temperaturę HVAC (CS = CarService, VHAL = Pojazd HAL)
Obsługa właściwości niestandardowych
Aby zaspokoić potrzeby specyficzne dla partnera, VHAL umożliwia niestandardowe właściwości, które są ograniczone do aplikacji systemowych. Podczas pracy z właściwościami niestandardowymi skorzystaj z następujących wskazówek:
- Identyfikator usługi należy wygenerować przy użyciu następujących pól:
-
VehiclePropertyGroup:VENDOR
GrupaVENDOR
jest używana tylko dla właściwości niestandardowych. -
VehicleArea
Wybierz odpowiedni typ obszaru. -
VehiclePropertyType
Wybierz odpowiedni typ danych. TypBYTES
pozwala na przekazywanie surowych danych, co w większości przypadków jest wystarczające. Częste wysyłanie dużych zbiorów danych przez niestandardowe właściwości może spowolnić dostęp do całej sieci pojazdu — zachowaj ostrożność, dodając duży ładunek. -
Property ID
Wybierz cztery identyfikatory nibble dla właściwości niestandardowej.
-
- Aby zapobiec fragmentacji ekosystemu, nie wolno używać właściwości niestandardowych do replikowania właściwości pojazdu, które już istnieją w ( VehiclePropertyIds SDK).
- Wypełnij
VehiclePropConfig.configString
z krótkim opisem właściwości niestandardowej. Pozwala to narzędziom do kontroli stanu psychicznego na oznaczenie przypadkowej replikacji istniejących właściwości pojazdu. Na przykład „stan światła zagrożenia”. - Dostęp przez
CarPropertyManager
(dla komponentów Java) lub przez Vehicle Network Service API (dla natywnych). Nie modyfikuj innych samochodowych interfejsów API, ponieważ może to prowadzić do przyszłych problemów ze zgodnością. - Po zaimplementowaniu właściwości dostawcy wybierz tylko listę uprawnień w wyliczeniu
VehicleVendorPermission
dla właściwości dostawcy. Mapowanie uprawnień dostawcy do właściwości systemu spowoduje złamanie CTS i VTS.
Obsługa właściwości HVAC
Możesz użyć VHAL do sterowania HVAC, ustawiając właściwości związane z HVAC. Większość nieruchomości HVAC to nieruchomości strefowe, chociaż kilka z nich to nieruchomości niestrefowe (globalne). Przykładowe zdefiniowane właściwości obejmują:
Nieruchomość | Zamiar |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | Ustaw temperaturę na strefę. |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | Kontroluj recyrkulację na strefę. |
Aby zobaczyć pełną listę właściwości HVAC, wyszukaj VEHICLE_PROPERTY_HVAC_ VEHICLE_PROPERTY_HVAC_*
w types.hal
. Gdy właściwość HVAC korzysta z VehicleAreaSeat
, obowiązują dodatkowe zasady mapowania strefowej właściwości HVAC na identyfikatory obszaru. Każde dostępne miejsce w samochodzie musi być częścią identyfikatora obszaru w tablicy identyfikatorów obszaru.
Przykład pierwszy. Samochód ma dwa przednie siedzenia ( ROW_1_LEFT, ROW_1_RIGHT
) i trzy tylne siedzenia ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
). Samochód posiada dwie jednostki kontroli temperatury: po stronie kierowcy i po stronie pasażera.
- Prawidłowy zestaw mapowania identyfikatorów obszarów dla
HVAC_TEMPERATURE SET
to:-
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 drugi. Samochód ma trzy rzędy siedzeń z dwoma siedzeniami w pierwszym rzędzie ( ROW_1_LEFT, ROW_1_RIGHT
), trzema siedzeniami w drugim ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
) i trzema w trzecim rzędzie ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
). Samochód posiada trzy jednostki kontroli temperatury: po stronie kierowcy, po stronie pasażera i tylnej. Rozsądnym sposobem odwzorowania HVAC_TEMPERATURE_SET
na identyfikatory obszarów jest użycie tablicy z trzema elementami:
-
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 dotyczące zasad, takie jak stan jazdy. Niektóre informacje z czujników (takie jak stan jazdy i tryb dzienny/nocny) są dostępne bez ograniczeń przez dowolną aplikację, ponieważ dane są niezbędne do stworzenia bezpiecznej aplikacji pojazdu. Inne informacje z czujników (takie jak prędkość pojazdu) są bardziej wrażliwe i wymagają określonych uprawnień, którymi mogą zarządzać użytkownicy.
Zobacz obsługiwane właściwości czujnika (w types.hal
).
Usługa mapy pojazdu
Usługa mapy pojazdu (VMS) zapewnia mechanizm wymiany danych map między klientami za pośrednictwem interfejsu pub/sub w celu obsługi typowych funkcji pojazdu, takich jak Advanced Driver Assistance Systems (ADAS) . Klienci mogą dołączyć systemy pojazdu komunikujące się za pośrednictwem właściwości VMS w VHAL lub uprzywilejowanych aplikacjach na Androida. Dane udostępniane w VMS mają być ograniczone do danych map do użytku przez systemy pojazdu i aplikacje pomocnicze.
VMS jest przeznaczony do użytku wyłącznie we wdrożeniach Android Automotive; AOSP nie zawiera domyślnych klientów, którzy publikują lub subskrybują VMS. W przypadku właściwości VMS w VHAL typy komunikatów i struktury danych są opisane w VHAL 2,0 w wyliczeniu VmsMessageType
, które zawiera listę obsługiwanych komunikatów VMS. To wyliczenie jest używane jako pierwsza liczba całkowita w tablicy liczb całkowitych właściwości pojazdu i określa sposób dekodowania reszty wiadomości.