Każda obsługiwana usługa jest określana przez konfigurację usługi zdefiniowaną w strukturze VehiclePropConfig
. Ma ona te pola:
Pole |
Opis |
---|
prop |
Identyfikator usługi. Musi to być jedna z zdefiniowanych właściwości systemowych z VehicleProperty.aidl lub właściwość dostawcy. Identyfikator usługi jest tworzony za pomocą funkcji bitowej OR z tych pól:
- (0x00000000) 16 bitów: unikalny identyfikator z zakresu 0x0100 – 0xffff.
- (0x00000000) 8 bitów: Typy usług, które definiują typ usługi.
- (0x00000000) 4 bity: Typy obszarów.
- (0x00000000) 4 bity:
VehiclePropertyGroup Może to być SYSTEM (0x10000000) lub VENDOR (0x20000000). Właściwości, które możesz dostosować, znajdziesz w sekcji Właściwości dostawcy.
Na przykład:
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)
|
access |
- Tryb dostępu do usługi. Musi być to
READ , WRITE lub READ_WRITE .
- W przypadku właściwości systemowych musi to być jeden z określonych trybów dostępu opisanych w dokumentacji
VehicleProperty.aidl .
- W przypadku usług, które mają dostęp na podstawie obszaru, jest to maksymalny podzbiór dostępu na podstawie obszaru. Jeśli na przykład usługi mają 2 obszary z dostępem
READ i READ_WRITE , ta wartość powinna być ustawiona na READ .
|
changeMode |
- Zmień tryb usługi. Musi być to
STATIC ,
ON_CHANGE lub CONTINUOUS . STATIC oznacza, że wartość właściwości nigdy się nie zmienia po uruchomieniu systemu. ON_CHANGE oznacza, że VHAL musi raportować, gdy wartość się zmienia. CONTINUOUS oznacza, że wartość właściwości zmienia się stale i VHAL musi raportować na podstawie częstotliwości próbkowania subskrypcji.
- W przypadku właściwości systemowych musi być ona równa trybowi zmiany opisanemu w
VehicleProperty.aidl .
|
configArray |
Opcjonalny tablica zawierająca konfigurację związaną z usługą. Może być puste. W przypadku niektórych właściwości systemowych, na przykład GEAR_SELECTION , tablica config ma specjalne znaczenie i musi być określona.
|
configString |
Opcjonalny ciąg tekstowy zawierający konfigurację specyficzną dla usługi. Może być puste. |
minSampleRate i maxSampleRate |
Minimalna i maksymalna obsługiwana częstotliwość próbkowania właściwości ciągłej (w hercach). Nieużywana, jeśli właściwość nie jest ciągła. minSampleRate i maxSampleRate muszą być osiągalne w ramach implementacji VHAL. Nie wszystkie częstotliwości próbkowania między wartością minimalną i maksymalną muszą być obsługiwane. |
Typy obiektów
Zdefiniowane jako typy zbiorcze w VehiclePropertyType.aidl
. Obsługiwane typy właściwości zostały wymienione w tabeli poniżej.
Typ nieruchomości |
Wartość |
Opis |
---|
STRING |
0x00100000 |
Właściwość ciągu znaków, która używa pola stringValue w wartości właściwości Pojazd. |
BOOLEAN |
0x00200000 |
Właściwość Boolean korzysta z pierwszego elementu w polu int32Values w Właściwości pojazdu.
0 oznacza false , a None 0 – true . |
INT32 |
0x00400000 |
Właściwość Integer korzysta z pierwszego elementu w polu int32Values w Właściwości pojazdu. |
INT32_VEC |
0x00410000 |
Właściwość Integer[] korzysta z elementów w polu int32Values w Właściwości pojazdu. |
INT64 |
0x00500000 |
Właściwość typu long, która używa pierwszego elementu w polu int64Values w wartości właściwości pojazdu. |
INT64_VEC |
0x00510000 |
Właściwość Long[] korzysta z elementów w polu int64Values w Właściwości pojazdu. |
FLOAT |
0x00600000 |
Właściwość Float korzysta z pierwszego elementu w polu floatValues w Właściwości pojazdu. |
FLOAT_VEC |
0x00610000 |
Właściwość Float[] korzysta z elementów w polu floatValues w Właściwości pojazdu. |
BYTES |
0x00700000 |
Właściwość byte[] korzysta z elementów w polu byteValues w Właściwości pojazdu. |
MIXED |
0x00e00000 |
Obiekt o mieszanym typie. dowolna kombinacja typów skalarnych lub wektorowych. Dokładny format musi być podany w tablicy config w konfiguracji usługi.
W przypadku usług typu MIXED dostawcy parametr configArray musi mieć taki format:
configArray[0] , 1 oznacza, że właściwość ma wartość String
configArray[1] , 1 oznacza, że właściwość ma wartość Boolean
configArray[2] , 1 oznacza, że usługa ma wartość Integer
configArray[3] , liczba wskazująca rozmiar Integer[] w usłudze
configArray[4] , 1 oznacza, że właściwość ma wartość Long
configArray[5] , liczba wskazująca rozmiar Long[] w usłudze
configArray[6] , 1 oznacza, że właściwość ma wartość Float
configArray[7] , liczba wskazująca rozmiar Float[] w usłudze
configArray[8] , liczba oznacza rozmiar byte[] w usłudze.
Na przykład configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} wskazuje, że właściwość ma wartość String , Boolean , Integer oraz tablicę z 3 liczbami całkowitymi.
|
Konfiguracja identyfikatora obszaru
Każda konfiguracja usługi może też zawierać listę konfiguracji identyfikatorów obszarów. Ta lista jest opcjonalna w przypadku usług globalnych i wymagana w przypadku usług strefowych (usług z wieloma obsługiwanymi obszarami). Każda konfiguracja identyfikatora obszaru zawiera te pola.
Pole |
Opis |
---|
areaId |
Identyfikator tego obszaru. Zobacz identyfikatory obszarów. |
minInt32Value i maxInt32Value |
- Opcjonalna minimalna i maksymalna wartość właściwości typu INT32 podczas uruchamiania. W przypadku wszystkich innych typów musi być równa 0. Jeśli obie wartości są równe 0, są ignorowane.
- W przypadku usługi globalnej, jeśli trzeba zdefiniować wartość minimalną i maksymalną, należy użyć jednej konfiguracji obszaru z identyfikatorem obszaru 0.
- Ta wartość jest statyczna i nie zmieni się nawet wtedy, gdy wartość minimalna lub maksymalna zmieni się w czasie wykonywania. Wprowadź
IVehicle#getMinMaxSupportedValue dla dynamicznej wartości minimalnej lub maksymalnej.
|
minInt64Value i maxInt64Value |
- Opcjonalna minimalna i maksymalna wartość właściwości typu INT64 podczas uruchamiania. W przypadku wszystkich innych typów musi być równa 0. Jeśli obie wartości są równe 0, są ignorowane.
- W przypadku usługi globalnej, jeśli trzeba zdefiniować wartość minimalną i maksymalną, należy użyć jednej konfiguracji obszaru z identyfikatorem obszaru 0.
- Ta wartość jest statyczna i nie zmieni się nawet wtedy, gdy wartość minimalna lub maksymalna zmieni się w czasie wykonywania. Wprowadź
IVehicle#getMinMaxSupportedValue dla dynamicznej wartości minimalnej lub maksymalnej.
|
minFloatValue i maxFloatValue |
- Opcjonalna minimalna i maksymalna wartość właściwości typu Float podczas uruchamiania. W przypadku wszystkich innych typów musi być równa 0. Ta wartość jest ignorowana, jeśli obie wartości są równe 0,0.
- W przypadku usługi globalnej, jeśli trzeba zdefiniować wartość minimalną i maksymalną, należy użyć jednej konfiguracji obszaru z identyfikatorem obszaru 0.
- Ta wartość jest statyczna i nie zmieni się nawet wtedy, gdy wartość minimalna lub maksymalna zmieni się w czasie wykonywania. Wprowadź
IVehicle#getMinMaxSupportedValue dla dynamicznej wartości minimalnej lub maksymalnej.
|
(Nowość w Androidzie 14)
supportedEnumValues |
- Opcjonalna lista obsługiwanych wartości na czas uruchamiania, jeśli właściwość jest zdefiniowana jako właściwość typu enum. Jeśli nie jest określony (pusty) lub jeśli jest starsza niż Android 14, przyjmuje się, że obsługiwane są wszystkie wartości enumeracji.
- W przypadku usługi globalnej, jeśli trzeba zdefiniować obsługiwane wartości wyliczenia, należy użyć jednej konfiguracji obszaru z identyfikatorem obszaru 0.
- Ta wartość jest statyczna i nie zmieni się nawet wtedy, gdy obsługiwane wartości zmienią się w czasie wykonywania. W przypadku obsługiwanych wartości dynamicznych zastosuj
IVehicle#getSupportedValuesLists .
- Dotyczy to tylko właściwości typu wyliczenie. W przypadku innych typów to pole musi być puste.
Aby wyświetlić obsługiwane wartości innych typów niż enum, użyj
IVehicle#getSupportedValuesLists .
|
(Nowości w Androidzie 15)
supportVariableUpdateRate |
- Czy obsługiwana jest częstotliwość aktualizacji zmiennych. Dotyczy to tylko usług ciągłych.
- Jeśli to
true , aplikacja może włączyć zmienną częstotliwość aktualizacji subskrypcji, aby otrzymywać zdarzenia aktualizacji właściwości tylko wtedy, gdy zmieni się wartość właściwości (co oznacza traktowanie właściwości ciągłych jako właściwości z aktualizacją w momencie zmiany).
- Jeśli wszyscy subskrybenci usługi mają włączoną zmienną częstotliwość aktualizacji, żądanie subskrypcji wysłane do VHAL powoduje włączenie zmiennej częstotliwości aktualizacji usługi, a VHAL musi wysyłać zdarzenia aktualizacji usługi tylko wtedy, gdy zmieni się wartość usługi.
- Jeśli jakikolwiek subskrybent żąda stałej częstotliwości aktualizacji, żądanie subskrypcji wysłane do VHAL wyłącza zmienną częstotliwość aktualizacji w przypadku usługi, a AAOS odfiltrowuje zduplikowane zdarzenia w przypadku klientów, którzy żądają zmiennej częstotliwości aktualizacji.
- BARDZO ZALECAMY obsługę zmiennej częstotliwości aktualizacji we wszystkich ciągłych usługach z wyjątkiem usługi Heartbeat, aby uzyskać lepszą wydajność. Zalecamy to, chyba że dane usługi są duże (np. tablica bajtów o rozmarze 1 kB) i mogą zajmować dużą ilość pamięci na potrzeby buforowania.
|
(nowość w Androidzie 16)
hasSupportedValueInfo |
- Jeśli nie
null , pokazuje, czy ta właściwość określa minimalne lub maksymalne obsługiwane wartości, czy listę obsługiwanych wartości.
- To pole określa, czy w przypadku tego identyfikatora usługi i identyfikatora obszaru obsługiwane są interfejsy API dynamicznych obsługiwanych wartości:
getMinMaxSupportedValue , getSupportedValuesLists , subscribeSupportedValueChange , unsubscribeSupportedValueChange .
- Jeśli nie, VHAL musi zaimplementować te interfejsy API dla tego identyfikatora usługi i identyfikatora obszaru.
null
- Jeśli
null lub Android 15 lub starsza wersja, dynamiczne obsługiwane wartości dla tego identyfikatora usługi i identyfikatora obszaru nie są obsługiwane. Klient musi używać statycznej obsługiwanej wartości podanej w konfiguracji właściwości pojazdu.
|
Typy obszarów
Zdefiniowane jako typy zbiorcze w VehicleArea.aidl
. Obsługiwane typy obszarów:
Typ obszaru |
Wartość |
Opis |
---|
GLOBAL |
0x01000000 |
Ta usługa jest usługą globalną i nie ma wielu obszarów. |
OKNO |
0x03000000 |
Obszar na podstawie okien, używa enum VehicleAreaWindow . |
MIRROR |
0x04000000 |
Obszar na podstawie luster, używa enum VehicleAreaMirror . |
SEAT |
0x05000000 |
Obszar na podstawie miejsc, używa enum VehicleAreaSeat . |
DOOR |
0x06000000 |
Obszar na podstawie drzwi, używa enum VehicleAreaDoor . |
KOŁO |
0x07000000 |
Pole „Area” (obszar) na podstawie kół, używa enum VehicleAreaWheel . |
Każda strefa w danej usłudze musi używać zdefiniowanego wstępnie typu obszaru. Każdy typ obszaru ma zestaw flag bitowych zdefiniowanych w enumeracji dla tego typu. Na przykład obszar SEAT definiuje te enumy:VehicleAreaSeat
ROW_1_LEFT = 0x0001
ROW_1_CENTER = 0x0002
ROW_1_RIGHT = 0x0004
ROW_2_LEFT = 0x0010
ROW_2_CENTER = 0x0020
ROW_2_RIGHT = 0x0040
ROW_3_LEFT = 0x0100
...
Identyfikatory obszarów
Właściwości z podziałem na strefy są adresowane za pomocą identyfikatorów obszarów. Każda usługa z podziałem na strefy może obsługiwać co najmniej 1 identyfikator obszaru. Identyfikator obszaru składa się z co najmniej 1 flagi z odpowiedniego typu zbiorczego. Na przykład usługa korzystająca z usługi VehicleAreaSeat
może używać tych identyfikatorów obszaru:
Produkt |
Opis |
---|
ROW_1_LEFT | ROW_1_RIGHT |
Identyfikator obszaru dotyczy obu przednich siedzeń. |
ROW_2_LEFT |
Dotyczy tylko lewego tylnego siedzenia. |
ROW_2_RIGHT |
Dotyczy tylko prawego tylnego siedzenia. |
Więcej informacji znajdziesz w artykule HVAC.