Właściwości dostawcy
Aby uwzględnić potrzeby poszczególnych partnerów, VHAL umożliwia dostęp do właściwości dostawcy tylko za pomocą interfejsów API systemu. Podczas pracy z właściwościami dostawcy postępuj zgodnie z tymi wytycznymi:
- Zawsze najpierw używaj 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, nie można używać właściwości dostawcy 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:VENDORGrupa VENDOR jest używana tylko w przypadku właściwości dostawcy.VehicleAreaWybierz odpowiedni typ obszaru.VehiclePropertyTypeWybierz 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 IDWybierz unikalny 2-bajtowy identyfikator właściwości dostawcy. Na przykład 0x1234.
- W polu
VehiclePropConfig.configStringwpisz krótki opis usługi 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, które wskazuje uprawnienia do odczytu wartości właściwości.configArray[3 * i + 2]Wartość wyliczeniowa wVehicleVendorPermission.aidlwskazująca 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_1wymagaandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEATdo odczytu,android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEATdo zapisu.vendor_prop-2wymaga dostępu do odczytuandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFOi nie ma możliwości zapisu w przypadku 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ą zapisać wartości w przypadku parametru vendor_prop_2. Tylko natywne klienty VHAL mogą zapisywać dane w tej właściwości.
Zaawansowane funkcje wspomagania kierowcy (ADAS)
Zobacz Właściwości pojazdu z systemem ADAS.SIEDZENIE I KIEROWNICA
Zobacz właściwości SEAT i STEERING_WHEEL.
Ogrzewanie, wentylacja i 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/klimatyzacji według identyfikatora obszaru. |
W przypadku właściwości systemu ogrzewania/wentylacji/klimatyzacji, które zależą od stanu zasilania systemu ogrzewania/wentylacji/klimatyzacji, 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. Więcej informacji znajdziesz w artykule 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 VehicleArea typu, 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 na stronę kierowcy i pasażera. Prawidłowy zestaw mapowania identyfikatorów obszarów dla pola 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) oraz 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 3-elementowa:
- 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 2 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.
| 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 koła są napompowane do zalecanego ciśnienia. |
| Długość | int32Values[1] |
Odległość pozioma między najbardziej zewnętrznymi 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ść z lusterkami | 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 środkami przednich i tylnych kół pojazdu. |
| Szerokość śladu z przodu | 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 wyznaczonego przez zewnętrzne koła pojazdu podczas pełnego skrętu przy całkowicie zablokowanej kierownicy. |
Zgodność z ogólnymi przepisami dotyczącymi bezpieczeństwa w 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ładem zastosowania 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ą zdefiniowane 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ą zakodować na stałe identyfikator właściwości.
Na przykład poniższy fragment kodu pokazuje, jak jest to obsługiwane w referencyjnym interfejsie 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 w przypadku 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 tego kodu: CarPropertyManager.getIntProperty.
- W Androidzie 13 i nowszych wersjach używaj
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCEjako 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.