Właściwości specjalne

Właściwości dostawcy

Aby zaspokoić potrzeby konkretnych partnerów, VHAL umożliwia korzystanie z właściwości dostawcy, do których dostęp jest możliwy tylko za pomocą interfejsów API systemu. Podczas pracy z właściwościami dostawcy postępuj zgodnie z tymi wytycznymi:

  • Zawsze staraj się najpierw używać właściwości systemowych. Właściwości dostawcy powinny być używane w ostateczności, gdy żadna z właściwości systemowych nie spełnia Twoich wymagań.
  • Aby zapobiec fragmentacji ekosystemu, właściwości dostawcy nie mogą być używane do replikowania właściwości pojazdu, które już istnieją w pakiecie SDK VehiclePropertyIds. Więcej informacji znajdziesz w sekcji 2.5, Wymagania dotyczące samochodów w CDD.
  • Aby wygenerować identyfikator usługi, użyj tych pól:
    • VehiclePropertyGroup:VENDOR Grupa VENDOR jest używana tylko w przypadku właściwości dostawcy.
    • VehicleArea Wybierz odpowiedni typ obszaru.
    • VehiclePropertyType Wybierz odpowiedni typ danych. Typ BYTES umożliwia przekazywanie surowych danych, co w większości przypadków jest wystarczające. Częste przesyłanie dużych ilości danych za pomocą właściwości dostawcy może spowolnić dostęp do całej sieci pojazdu. Zachowaj ostrożność podczas dodawania dużego ładunku.
    • Property ID Wybierz unikalny dwubajtowy identyfikator właściwości dostawcy. Na przykład 0x1234.
  • W polu VehiclePropConfig.configString wpisz krótki opis właściwości dostawcy. Dzięki temu narzędzia do sprawdzania poprawności mogą oznaczać przypadkowe powielenie istniejących właściwości pojazdu. Na przykład „Moja właściwość niestandardowa dla XYZ”.
  • Dostęp przez CarPropertyManager (w przypadku komponentów Java) lub przez libvhalclient (w przypadku komponentów natywnych). Nie modyfikuj innych interfejsów API samochodu, ponieważ może to prowadzić do problemów ze zgodnością w przyszłości.

Uprawnienia dotyczące usług dostawcy

Domyślne uprawnienie dla wszystkich zdefiniowanych właściwości dostawcy to android.car.Car.PERMISSION_VENDOR_EXTENSION. Aby uzyskać większą szczegółowość kontroli uprawnień, obsługuj właściwość SUPPORT_CUSTOMIZE_VENDOR_PERMISSION. Ta właściwość STATIC jest tylko do odczytu, a jej tablica konfiguracji określa uprawnienia do właściwości dostawcy. Wartość configArray jest ustawiana w ten sposób (i to liczba całkowita zaczynająca się od 0):

  • configArray[3 * i] propId – identyfikator usługi dostawcy.
  • configArray[3 * i + 1] Wyliczenie w VehicleVendorPermission.aidl wskazujące uprawnienia do odczytu wartości właściwości.
  • configArray[3 * i + 2] Wyliczenie w VehicleVendorPermission.aidl, które wskazuje uprawnienie do zapisywania wartości właściwości.

Na przykład ta tablica konfiguracji określa, że właściwości dostawcy vendor_prop_1vendor_prop_2 mają te uprawnienia:

  • vendor_prop_1 wymaga android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT do odczytu, android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT do zapisu.
  • vendor_prop-2 wymaga uprawnień do odczytu android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO i nie można w nim zapisywać danych z aplikacji na Androida.
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

Usługi dostawców, których nie ma w tej tablicy, mają domyślne uprawnienia dostawcy. Gdy wybierzesz PERMISSION_NOT_ACCESSIBLE, aplikacje na Androida nie będą miały dostępu do usługi. W tym przykładzie aplikacje na Androida nie mogą zapisywać wartości w przypadku parametru vendor_prop_2. Tylko natywne klienty VHAL mogą zapisywać dane w tej właściwości.

Zaawansowane systemy wspomagania kierowcy (ADAS)

Zobacz Właściwości pojazdu z systemem ADAS.

SIEDZENIE I KIEROWNICA

Zobacz Właściwości fotela i kierownicy.

ogrzewanie/wentylacja/klimatyzacja

Za pomocą VHAL możesz sterować systemem ogrzewania/wentylacji/klimatyzacji, ustawiając właściwości związane z tym systemem. Większość właściwości HVAC jest powiązana z określonymi obszarami w pojeździe, chociaż kilka z nich to właściwości globalne. Przykładowe zdefiniowane właściwości:

Właściwość Cel
HVAC_TEMPERATURE_SET Ustaw temperaturę według identyfikatora obszaru.
HVAC_POWER_ON Stan zasilania systemu ogrzewania/wentylacji/klimatyzacji według identyfikatora obszaru.

W przypadku właściwości HVAC, które zależą od stanu zasilania systemu HVAC, muszą one być wymienione w tablicy konfiguracji HVAC_POWER_ON. Aby zobaczyć pełną listę właściwości HVAC, wyszukaj HVAC_*VehicleProperty.aidl. Zobacz Obsługiwane właściwości systemu. usługi.

Reguły mapowania właściwości HVAC typu VehicleArea innych niż GLOBAL na identyfikatory AreaID: Każdy „obszar” określonego typu VehicleArea, na który wpływa właściwość, musi być uwzględniony w identyfikatorze obszaru dla tej właściwości. Regulatory temperatury są przypisywane do foteli, na które mają „największy wpływ”, ale każdy fotel musi być uwzględniony dokładnie raz. Przypisanie środkowego tylnego siedzenia do lewego lub prawego identyfikatora AreaID może wydawać się arbitralne, ale uwzględnienie każdego siedzenia, którego dotyczy problem, w dokładnie jednym identyfikatorze AreaID zapewnia, że wszystkie siedzenia w samochodzie są uwzględnione i dostępny jest rozsądny sposób na oddziaływanie na każde z nich.

Przykład 1

Samochód ma 2 przednie siedzenia (ROW_1_LEFT, ROW_1_RIGHT) i 3 tylne (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Są 2 jednostki sterowania temperaturą, po jednej po stronie kierowcy i pasażera. Prawidłowy zestaw mapowania identyfikatorów obszarów dla parametru HVAC_TEMPERATURE_SET to tablica dwuelementowa:

  • ROW_1_LEFT | ROW_2_LEFT
  • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT

Alternatywne mapowanie dla tej samej konfiguracji sprzętu może wyglądać tak:

  • ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
  • ROW_1_RIGHT | ROW_2_RIGHT

Przykład 2

Samochód ma 3 rzędy siedzeń: 2 siedzenia w pierwszym rzędzie (ROW_1_LEFT, ROW_1_RIGHT) i po 3 siedzenia w drugim (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) i trzecim rzędzie (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Dostępne są 3 jednostki sterowania temperaturą: po jednej dla strony kierowcy, strony pasażera i tyłu. Rozsądnym sposobem mapowania HVAC_TEMPERATURE_SET na identyfikatory obszarów jest tablica z 3 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

Przykład 3

Samochód ma 2 przednie siedzenia (ROW_1_LEFT, ROW_1_RIGHT) i 3 tylne (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Załóżmy, że samochód obsługuje funkcję HVAC_AUTO_ON tylko w przypadku dwóch przednich foteli. Prawidłowy zestaw mapowań identyfikatorów obszarów dla HVAC_AUTO_ON to tablica z 1 elementem:

  • ROW_1_LEFT | ROW_1_RIGHT

Jeśli HVAC_AUTO_ON miał 2 oddzielne jednostki sterujące po stronie kierowcy i pasażera, alternatywne mapowanie byłoby tablicą 2-elementową:

  • ROW_1_LEFT
  • ROW_1_RIGHT

INFO_EXTERIOR_DIMENSIONS

Wymiary zewnętrzne pojazdu są mierzone w milimetrach, jak pokazano na rysunku 1.

Rysunek 1. Wymiary zewnętrzne pojazdu, widok z przodu.
Rysunek 2. Wymiary zewnętrzne pojazdu, widok z boku.

Użyj właściwości opisanych w tej tabeli, aby określić wymiary zewnętrzne pojazdu.

Usługa pojazdu Pole VHAL Opis
Wysokość int32Values[0] Pionowa odległość między podłożem a najwyższym punktem pojazdu. Zakładamy, że koła fabryczne są napompowane do prawidłowego ciśnienia.
Długość int32Values[1] Odległość pozioma między najbardziej wysuniętymi punktami z przodu i z tyłu pojazdu.
Szerokość bez lusterek int32Values[2] Odległość w poziomie między dwoma najbardziej zewnętrznymi punktami po każdej stronie pojazdu, z wyłączeniem lusterek bocznych.
Szerokość, w tym lusterka int32Values[3] Odległość w poziomie między dwoma najbardziej zewnętrznymi punktami po każdej stronie pojazdu, w tym lusterkami bocznymi.
Rozstaw kół int32Values[4] Odległość między środkiem przednich i tylnych kół pojazdu.
Rozstaw kół przednich int32Values[5] Odległość między przednimi kołami mierzona od linii środkowej jednego bieżnika do linii środkowej przeciwległego bieżnika.
Rozstaw kół z tyłu int32Values[6] Odległość między tylnymi kołami mierzona od linii środkowej jednego bieżnika do linii środkowej przeciwległego bieżnika.
Średnica zawracania od krawężnika do krawężnika int32Values[7] Średnica okręgu, jaki tworzą zewnętrzne koła pojazdu podczas pełnego skrętu przy całkowicie zablokowanej kierownicy.

Zgodność z ogólnymi przepisami bezpieczeństwa Unii Europejskiej

Jeśli pojazd musi spełniać wymagania ogólnego rozporządzenia o bezpieczeństwie (GSR) obowiązującego w Unii Europejskiej za pomocą Androida, musi obsługiwać właściwość GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT. Przykładowym zastosowaniem jest GSR-ISA (Intelligent Speed Assist) zgodnie z rozporządzeniem UE 2019/2144. Ta właściwość jest dodawana w AIDL VHAL od Androida 13, ale jest obsługiwana w Car Service od premiery Androida 12. Ta właściwość jest zdefiniowana jako statyczna globalna właściwość całkowita tylko do odczytu, a jej możliwe wartości są określone przez wyliczenie GsrComplianceRequirementType:

Nazwa Wartość Opis
GSR_COMPLIANCE_NOT_REQUIRED 0 Zgodność z GSR nie jest wymagana
GSR_COMPLIANCE_REQUIRED_V1 1 Wymagana jest zgodność z GSR, a wersja rozwiązania spełniającego to wymaganie to 1.

Aby obsługiwać tę właściwość w HIDL VHAL (w Androidzie 12), dostawcy muszą na stałe zakodować identyfikator właściwości. Na przykład poniższy fragment kodu pokazuje, jak jest to obsługiwane w referencyjnym HIDL VHAL DefaultConfig.h:

{
  .config =
      {
          // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
          .prop = 0x11400F47,
          .access = VehiclePropertyAccess::READ,
          .changeMode = VehiclePropertyChangeMode::STATIC,
      },
  // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1
  .initialValue = {.int32Values = {1}},
}

Aby obsługiwać tę właściwość w AIDL VHAL (od Androida 13), dostawcy mogą używać identyfikatora właściwości z VehicleProperty.h i wyliczenia z GsrComplianceRequirementType.h. Na przykład tak jak w przypadku referencyjnego AIDL VHAL DefaultProperties.json:

{
  "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT",
  "defaultValue": {
    "int32Values": [
      "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1"
    ]
  }
}

Aby odczytać tę właściwość z aplikacji na Androida, użyj CarPropertyManager.getIntProperty.

  • W Androidzie 13 i nowszych wersjach używaj VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE jako identyfikatora usługi.
  • W Androidzie 12 użyj zakodowanej na stałe wartości 0x11400F47 jako identyfikatora właściwości. Ta właściwość wymaga uprawnienia Car#PERMISSION_CAR_INFO.