Właściwości specjalne

Właściwości dostawcy

Aby zaspokoić potrzeby partnerów, VHAL umożliwia korzystanie z usług dostawców, do których dostęp jest możliwy tylko przez interfejsy API systemu. Podczas pracy z właściwościami dostawcy postępuj zgodnie z tymi wskazówkami:

  • Najpierw zawsze używaj właściwości systemu, a właściwości dostawcy używaj tylko wtedy, gdy żadna z właściwości systemu nie spełnia Twoich wymagań.
  • Aby zapobiec fragmentacji ekosystemu, właściwości dostawcy nie mogą służyć do powielania właściwości pojazdu, które istnieją już w pakiecie SDK.VehiclePropertyIds. Więcej informacji znajdziesz w sekcji 2.5 Wymagania motoryzacyjne w CDD.
  • Aby wygenerować identyfikator obiektu, użyj tych pól:
    • VehiclePropertyGroup:VENDOR Grupa dostawcy 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 nieprzetworzonych danych, co w większości przypadków jest wystarczające. Częste wysyłanie dużych ilości danych za pomocą usług dostawców może spowolnić dostęp do całej sieci pojazdu. Zachowaj ostrożność podczas dodawania dużej ładowności.
    • Property ID Wybierz unikalny 2-bajtowy identyfikator dla usługi 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 powielanie właściwości pojazdu. Na przykład „Moja usługa 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 samochodów, ponieważ może to spowodować problemy ze zgodnością w przyszłości.

Uprawnienia dotyczące usług dostawcy

Domyślne uprawnienia dla wszystkich zdefiniowanych właściwości dostawcy to android.car.Car.PERMISSION_VENDOR_EXTENSION. Aby uzyskać bardziej szczegółową kontrolę uprawnień, obsłuż właściwość SUPPORT_CUSTOMIZE_VENDOR_PERMISSION. Ta właściwość STATIC ma tylko odczyt, a jej tablica config określa uprawnienia do właściwości dostawcy. configArray jest ustawiony w następujący sposób (i to liczba całkowita rozpoczynają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] Wyrażenie enumeracyjne w polu VehicleVendorPermission.aidl, które wskazuje uprawnienia do zapisywania wartości właściwości.

Na przykład poniższa tablica config konfiguruje 2 właściwości dostawcy (vendor_prop_1 i vendor_prop_2) w taki sposób, aby otrzymać uprawnienia:

  • vendor_prop_1 wymaga uprawnień android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT do odczytu i 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, ale nie do zapisu w przypadku aplikacji na Androida.
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

Właściwości dostawcy, którego nie ma w tej tablicy, przyjmują domyślne uprawnienia dostawcy. Jeśli wybierzesz opcję 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ą zapisać wartości parametru vendor_prop_2. Do tej usługi mogą zapisywać dane tylko natywnych klientów VHAL.

Zaawansowane systemy wspomagania kierowcy (ADAS)

Zobacz Właściwości pojazdu ADAS.

FOTEL I KIEROWNICA

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

ogrzewanie/wentylacja/klimatyzacja

Za pomocą VHAL możesz sterować systemem HVAC, ustawiając właściwości związane z klimatyzacją. Większość właściwości ogrzewania, wentylacji i klimatyzacji jest powiązana z określonymi obszarami pojazdu, ale niektóre z nich są właściwościami globalnymi. Przykładowe zdefiniowane właściwości:

Właściwość Cel
HVAC_TEMPERATURE_SET Ustawianie temperatury dla poszczególnych obszarów.
HVAC_POWER_ON Stan zasilania systemu HVAC według identyfikatora obszaru.

Właściwości systemu HVAC, które zależą od stanu zasilania systemu, muszą być wymienione w tablicy konfiguracji HVAC_POWER_ON. Aby zobaczyć pełną listę właściwości systemów HVAC, wyszukaj HVAC_*VehicleProperty.aidl. Więcej informacji znajdziesz w artykule Obsługiwane właściwości systemu. właściwości.

Reguły mapowania właściwości ogrzewania/wentylacji/klimatyzacji o nieglobalnym typie pojazdu na identyfikatory AreaID: Każdy „obszar” określonego typu VehicleArea, którego dotyczy obiekt, musi być zawarty w identyfikatorze obszaru tej usługi. Sterowniki temperatury są przypisane do foteli, na które mają „największy wpływ”, ale każdy z nich musi być uwzględniony dokładnie raz. Przypisanie środkowego tylnego miejsca do lewej lub prawej strony interfejsu AreaID może wydawać się dowolne, jednak uwzględnienie każdego miejsca, którego dotyczy problem, do jednego identyfikatora AreaID daje pewność, że wszystkie miejsca w samochodzie są wyraźnie widoczne, a na każde z nich możliwy jest zasadniczy wpływ na każde z nich.

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). Urządzenie ma 2 jednostki sterowania temperaturą: po stronie kierowcy i pasażera. Prawidłowy zestaw mapowania identyfikatorów obszarów dla parametru HVAC_TEMPERATURE_SET to tablica o 2 elementach:

  • 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_CENTER | ROW_2_LEFT
  • ROW_1_RIGHT | ROW_2_RIGHT

Przykład 2

Samochód ma 3 miejsca z 2 miejscami w pierwszym rzędzie (ROW_1_LEFT, ROW_1_RIGHT) oraz 3 miejsca w drugim (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) i w trzecim rzędzie (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Urządzenie sterujące temperaturą ma 3 jednostki: po stronie kierowcy, pasażera i z tyłu. Rozsądnym sposobem mapowania parametru HVAC_TEMPERATURE_SET na identyfikatory obszarów jest tablica o 3 elementach:

  • ROW_1_LEFT
  • ROW_1_PRAWO
  • 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 fotele (ROW_1_LEFT, ROW_1_RIGHT) i 3 tylne fotele (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Załóżmy, że samochód obsługuje HVAC_AUTO_ON tylko dla 2 przednich siedzeń. Prawidłowym zestawem mapowań identyfikatorów AreaID dla HVAC_AUTO_ON byłaby tablica z jednym elementem:

  • ROW_1_LEFT | ROW_1_RIGHT

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

  • ROW_1_LEFT
  • ROW_1_RIGHT

INFO_EXTERIOR_DIMENSIONS

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

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

Aby zdefiniować wymiary zewnętrzne pojazdu, użyj właściwości opisanych w tej tabeli.

Właściwość pojazdu Pole VHAL Opis
Wzrost int32Values[0] Pionowa odległość między podłożem a najwyższym punktem pojazdu. Zakładamy, że opony są napompowane do prawidłowego ciśnienia.
Długość int32Values[1] Pozioma odległość między najbardziej wysuniętymi punktami z przodu i z tyłu pojazdu.
Szerokość, bez luster int32Values[2] Odległość pozioma między dwoma najbardziej oddalonymi od siebie punktami po obu stronach pojazdu, z wyłączeniem lusterek bocznych.
Szerokość, w tym lusterka int32Values[3] Odległość w poziomie między 2 najbardziej zewnętrznymi punktami po każdej stronie pojazdu, w tym lusterkami bocznymi.
Podstawa koła int32Values[4] Odległość między środkiem przedniego i tylnego koła pojazdu.
Szerokość torów, widok z przodu int32Values[5] Odległość między kołem przednim, mierzona od linii środkowej bieżnika jednego opony do linii środkowej bieżnika drugiego opony.
Szerokość torów, tył int32Values[6] Odległość między tylnym kołem mierzona od linii środkowej bieżnika do środkowej linii bieżnika przeciwległego bieżnika.
Średnica skrętu na krawężniku int32Values[7] Średnica okręgu utworzona przez zewnętrzne koła pojazdu podczas wykonywania pełnego skrętu z w pełni zablokowanym kołem kierownicy.

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

Jeśli pojazd musi być zgodny z ogólnymi przepisami bezpieczeństwa UE (GSR) na Androidzie, usługa GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT musi być obsługiwana. Przykładem zastosowania jest GSR-ISA (Intelligent Speed Assist) zgodnie z definicją w rozporządzeniu UE 2019/2144. Ta właściwość została dodana w AIDL VHAL w Androidzie 13, ale jest obsługiwana w Car Service od wydania Androida 12. Ta właściwość jest zdefiniowana jako statyczna globalna właściwość liczbowa tylko do odczytu, a możliwe wartości są określone przez typ enumeracji GsrComplianceRequirementType:

Nazwa Wartość Opis
GSR_COMPLIANCE_NOT_REQUIRED 0 Zgodność z GSR nie jest wymagana
GSR_COMPLIANCE_REQUIRED_V1 1 Zgodność z GSR jest wymagana, a rozwiązanie wymagające w wersji 1 to 1.

Aby obsługiwać tę właściwość w HIDL VHAL (w Androidzie 12), producenci muszą zakodować identyfikator obiektu. Na przykład poniższy fragment kodu pokazuje, jak jest to obsługiwane w przykładowym pliku 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 usługi z VehicleProperty.h i enumeracji z GsrComplianceRequirementType.h. Na przykład 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 atrybutu CarPropertyManager.getIntProperty.

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