Właściwości pojazdu

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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 strefowej unsubscribe(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

VHAL pobierz przykład 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 .

Przykład zestawu VHAL HVAC

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
      Grupa VENDOR jest używana tylko dla właściwości niestandardowych.
    • VehicleArea
      Wybierz odpowiedni typ obszaru.
    • VehiclePropertyType
      Wybierz odpowiedni typ danych. Typ BYTES 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.