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, nie można używać właściwości dostawcy do powielania właściwości pojazdu, które istnieją już w pakiecie SDK.VehiclePropertyIds Więcej informacji znajdziesz w sekcji 2.5 Wymagania dotyczące pojazdów w dokumentacji 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 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żej ładowni.Property ID
Wybierz unikalny 2-bajtowy identyfikator 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 jest tylko do odczytu, a jej tablica config określa uprawnienia dla 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]
W typie enumVehicleVendorPermission.aidl
określ uprawnienia do odczytu wartości właściwości.configArray[3 * i + 2]
Wyrażenie zbiorcze w poluVehicleVendorPermission.aidl
, które wskazuje uprawnienia do zapisywania 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 iandroid.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
, 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ó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
. Do tej usługi mogą zapisywać dane tylko natywni klienci 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_*
w VehicleProperty.aidl
. Więcej informacji znajdziesz w artykule Obsługiwane właściwości systemu.
właściwości.
Zasady mapowania właściwości HVAC typu VehicleArea, które nie są typu GLOBAL, na identyfikatory obszarów:
Każdy „obszar” danego typu VehicleArea
, na który wpływa dana właściwość, musi być uwzględniony w identyfikatorze obszaru tej właściwości. Sterowniki temperatury są przypisane do miejsc, na które mają „największy wpływ”, ale każde miejsce objęte kontrolą musi być uwzględnione 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). 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
Alternatywą 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 rzędy siedzeń: 2 miejsca z przodu (ROW_1_LEFT, ROW_1_RIGHT) oraz 3 miejsca w drugim (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) i trzecim rzędzie (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Istnieją 3 urządzenia sterujące temperaturą: 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_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 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_RIGHT
Jeśli HVAC_AUTO_ON
ma 2 oddzielne jednostki sterujące po stronie kierowcy i pasażera, alternatywne mapowanie będzie tablicą o 2 elementach:
- 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 |
---|---|---|
Wysokość | 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ść, z wyłączeniem lusterek | 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ść pozioma między dwoma najbardziej oddalonymi od siebie punktami po obu stronach 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 jednego opony do linii środkowej bieżnika drugiego opony. |
Średnica skrętu na krawężniku | int32Values[7] |
Średnica okręgu opisanego przez zewnętrzne koła pojazdu podczas pełnego skrętu koła kierownicy. |
Zgodność z ogólnymi przepisami bezpieczeństwa Unii Europejskiej
Jeśli pojazd musi spełniać wymagania ogólnych przepisów 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 liczba całkowita, która jest tylko do odczytu. Możliwe wartości są zdefiniowane przez enum GsrComplianceRequirementType
:
Nazwa | Wartość | Opis |
---|---|---|
GSR_COMPLIANCE_NOT_REQUIRED |
0 | Zgodność z wymaganiami 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 usługi.
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 jako identyfikator usługi użyj wartości
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
.