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 wVehicleVendorPermission.aidl
wskazujące uprawnienia do odczytu wartości właściwości.configArray[3 * i + 2]
Wyliczenie wVehicleVendorPermission.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_1
i vendor_prop_2
mają te uprawnienia:
vendor_prop_1
wymagaandroid.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 odczytuandroid.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_*
w 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.


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
.