Właściwości dostawcy
Aby zaspokoić konkretne potrzeby partnerów, VHAL zezwala na dostęp do właściwości dostawcy tylko przez systemowe interfejsy API. Podczas pracy z usługami dostawcy stosuj się do tych wskazówek:
- 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, nie wolno używać właściwości dostawcy do powielania pojazdu usług, które występują już w pakiecie SDK Identyfikatory pojazdów. Więcej informacji znajdziesz w sekcji 2.5 „Wymagania motoryzacyjne” w CDD.
- Aby wygenerować identyfikator usługi, użyj tych pól:
- Grupa VENDOR
VehiclePropertyGroup:VENDOR
jest używana tylko w przypadku usług dostawcy. VehicleArea
Wybierz odpowiedni typ obszaru.VehiclePropertyType
Wybierz odpowiedni typ danych. Typ BYTES umożliwia przekazywanie danych nieprzetworzonych, co w większości przypadków wystarcza. 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żego ładunku.Property ID
Wybierz unikalny 2-bajtowy identyfikator usługi dostawcy. Na przykład 0x1234.
- Grupa VENDOR
- W polu
VehiclePropConfig.configString
wpisz krótki opis właściwości dostawcy. Dzięki temu narzędzia do sprawdzania poprawności oznaczają przypadkową replikację istniejących właściwości pojazdu. Na przykład „Moja usługa niestandardowa dla XYZ”. - Dostęp przez
CarpropertyManager
(w przypadku komponentów Java) lub za pomocą metody
libvhalclient
(na potrzeby reklam 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 uprawnienie wszystkich zdefiniowanych usług 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 STATYSTYKA
usługa jest tylko do odczytu, dla której jej tablica config określa uprawnienia do właściwości dostawcy.
Wartość configArray
jest ustawiana w następujący sposób (i jest liczbą całkowitą, która zaczyna się od 0):
configArray[3 * i]
propId, identyfikator usługi dostawcy.configArray[3 * i + 1]
Wartość enum wVehicleVendorPermission.aidl
wskazująca uprawnienia do odczytu wartości właściwości.configArray[3 * i + 2]
Wyliczenie w zakresieVehicleVendorPermission.aidl
do wskazać uprawnienia do zapisu wartości właściwości.
Na przykład następująca tablica konfiguracji konfiguruje 2 właściwości dostawcy (vendor_prop_1
i vendor_prop_2
), aby miały uprawnienia:
vendor_prop_1
wymaga uprawnień: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
wymagaandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO
tylko do czytania i zapisu w aplikacjach 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órych nie ma na tej liście, mają 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
. Tylko natywne
Klienci VHAL mogą zapisywać w tej usłudze.
Zaawansowane systemy wspomagania kierowcy (ADAS)
Zobacz Właściwości pojazdu ADAS.SEAT i STEERING
Patrz Właściwości fotela i sterowania.
ogrzewanie/wentylacja/klimatyzacja
Za pomocą VHAL możesz sterować systemem HVAC, ustawiając właściwości związane z klimatyzacją. Większość obiektów ogrzewania/wentylacji/klimatyzacji są powiązane z konkretnymi obszarami pojazdu, chociaż kilka z nich jest 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_*
w VehicleProperty.aidl
. Więcej informacji znajdziesz w artykule Obsługiwane właściwości systemu.
usług.
Zasady mapowania właściwości HVAC typu VehicleArea, które nie są typu GLOBAL, na identyfikatory obszarów:
Każda „strefa” danego typu VehicleArea
, na którą ma wpływ dana właściwość, musi być uwzględniona w identyfikatorze obszaru tej właściwości. Sterowniki temperatury są przypisywane do foteli, na które mają „największy wpływ”, ale każdy dotknięty fotel musi być uwzględniony dokładnie raz.
Przypisanie środkowego tylnego siedzenia do lewego lub prawego identyfikatora AreaID może wydawać się przypadkowe, ale uwzględnienie wszystkich dotkniętych miejsc w jednym identyfikatorze AreaID zapewnia, że wszystkie miejsca w samochodzie są wyrażone i że istnieje rozsądny sposób wpływania na każde miejsce.
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). Dostępne są dwie jednostki sterowania temperaturą, po jednej
po stronie kierowcy i pasażera. Prawidłowy zestaw mapowania identyfikatorów AreaID dla
HVAC_TEMPERATURE_SET
byłaby tablicą dwuelementową:
- ROW_1_LEFT | WIERSZ_2_LEWY
- ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
Alternatywne mapowanie dla tej samej konfiguracji sprzętowej to:
- ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_PRAWY
Przykład 2
Samochód ma 3 rzędy miejsc z 2 miejscami w pierwszym rzędzie (ROW_1_LEFT, ROW_1_RIGHT)
i 3 miejsca w drugim rzędzie (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ądny sposób tworzenia map
Od HVAC_TEMPERATURE_SET
do identyfikatorów AreaID 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 | WIERSZ_3_PRAWY
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łowy zestaw mapowania AreaID dla HVAC_AUTO_ON to tablica z jednym elementem:
- ROW_1_LEFT | ROW_1_PRAWO
Jeśli HVAC_AUTO_ON
ma 2 oddzielne jednostki sterujące po stronie kierowcy i pasażera
, alternatywnym mapowaniem byłaby tablica z dwoma elementami:
- ROW_1_LEFT
- ROW_1_RIGHT
INFO_EXTERIOR_DIMENSIONS
Wymiary zewnętrzne pojazdu są podawane w milimetrach, jak pokazano na rysunku 1.


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] |
Odległość w pionie 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ść razem z lustrami | int32Values[3] |
Odległość w poziomie między dwoma najbardziej zewnętrznymi punktami po każdej stronie pojazdu w tym w lusterkach bocznych. |
Podstawa kół | int32Values[4] |
Odległość między środkiem przedniego i tylnego koła pojazdu. |
Rozstaw kół, 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 środkowej linii bieżnika opony do na linii środkowej przeciwległego bieżnika. |
Średnica do skrętu na zewnątrz | int32Values[7] |
Średnica okręgu utworzona przez zewnętrzne koła pojazdu podczas wykonywania pełnego skrętu z w pełni zablokowana kierownicą. |
Zgodność z ogólnymi przepisami bezpieczeństwa w Unii Europejskiej
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 z Androida 13, ale jest
obsługiwane w usłudze samochodowej od wersji 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 | Wymagane jest zachowanie zgodności z wytycznymi Google SRE, a wersja rozwiązania zgodnego z wytycznymi to 1. |
Aby obsługiwać tę właściwość w HIDL VHAL (w Androidzie 12), producenci muszą zakodować identyfikator obiektu.
Na przykład ten 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ę usługę w AIDL VHAL (z Androida 13), dostawcy mogą używać identyfikatora usługi z
VehicleProperty.h
i wyliczenie 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 użyj funkcji
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
.