Od 27 marca 2025 r. zalecamy używanie android-latest-release zamiast aosp-main do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Konfiguracje usługi
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Każda obsługiwana właściwość jest określana przez konfigurację właściwości zdefiniowaną za pomocą struktury VehiclePropConfig i ma te pola:
| Pole |
Opis |
|---|
prop |
Identyfikator usługi. Musi to być jedna ze zdefiniowanych właściwości systemowych z VehicleProperty.aidl lub właściwość dostawcy. Identyfikator usługi jest tworzony za pomocą operacji bitowej OR na tych polach (od prawej do lewej):
- (0x00000000) 16 bitów: unikalny identyfikator z zakresu 0x0100–0xffff.
- (0x00000000) 8 bitów: typy właściwości, które określają typ właściwości.
- (0x00000000) 4 bity: typy obszarów.
- (0x00000000) 4 bity:
VehiclePropertyGroup może to być SYSTEM
(0x10000000) lub VENDOR (0x20000000). W sekcji Właściwości dostawcy znajdziesz właściwości, które możesz dostosować.
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 to być jedna z tych wartości:
READ, WRITE lub READ_WRITE.
- W przypadku właściwości systemowych musi to być jeden ze zdefiniowanych trybów dostępu opisanych w
VehicleProperty.aidl.
- W przypadku usług, które mają dostęp na poziomie obszaru, jest to maksymalny podzbiór dostępu na poziomie obszaru. Jeśli np. usługi mają 2 obszary, do których dostęp jest określony jako
READ i READ_WRITE, należy ustawić wartość READ.
|
changeMode |
- Zmień tryb usługi. Musi to być jedna z tych wartości:
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ę zmieni. CONTINUOUS oznacza, że wartość właściwości zmienia się w sposób ciągły, a VHAL musi raportować na podstawie częstotliwości próbkowania subskrypcji.
- W przypadku właściwości systemowych musi to być tryb zmiany opisany w
VehicleProperty.aidl.
|
configArray |
Opcjonalna tablica zawierająca konfigurację konkretnej usługi. Może być puste. W przypadku niektórych właściwości systemowych, np. 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 dla właściwości ciągłej (w hercach). Nie jest używana, jeśli właściwość nie jest ciągła. Wymagania minSampleRate i maxSampleRate muszą być możliwe do spełnienia przez implementację VHAL. Nie wszystkie częstotliwości próbkowania między wartością minimalną a maksymalną muszą być obsługiwane. |
Typy usług
Zdefiniowane jako wyliczenia w VehiclePropertyType.aidl. Obsługiwane typy właściwości zostały wymienione w tej tabeli.
| Typ usługi |
Wartość |
Opis |
|---|
STRING |
0x00100000 |
Właściwość tekstowa, która korzysta z pola stringValue w wartości właściwości pojazdu. |
BOOLEAN |
0x00200000 |
Boolean korzysta z pierwszego elementu w polu int32Values w wartości właściwości pojazdu.
0 oznacza false, a None 0 oznacza true. |
INT32 |
0x00400000 |
Integer korzysta z pierwszego elementu w polu int32Values w wartości właściwości pojazdu. |
INT32_VEC |
0x00410000 |
Integer[] korzysta z elementów w polu int32Values w Wartość właściwości pojazdu. |
INT64 |
0x00500000 |
Długa właściwość, która korzysta z pierwszego elementu w polu int64Values w wartości właściwości pojazdu. |
INT64_VEC |
0x00510000 |
Long[] korzysta z elementów w polu int64Values w Wartość właściwości pojazdu. |
FLOAT |
0x00600000 |
Float korzysta z pierwszego elementu w polu floatValues w wartości właściwości pojazdu. |
FLOAT_VEC |
0x00610000 |
Float[] korzysta z elementów w polu floatValues w Wartość właściwości pojazdu. |
BYTES |
0x00700000 |
byte[] korzysta z elementów w polu byteValues w Wartość właściwości pojazdu. |
MIXED |
0x00e00000 |
Właściwość mieszanego typu. Dowolna kombinacja typów skalarnych lub wektorowych. Dokładny format musi być podany w tablicy konfiguracji w konfiguracji usługi.
W przypadku usług dostawcy typu MIXED element configArray musi mieć następującą strukturę:
configArray[0], 1 oznacza, że usługa ma wartość String
configArray[1], 1 oznacza, że usługa ma wartość Boolean
configArray[2], 1 oznacza, że usługa ma wartość Integer
configArray[3], liczba oznacza rozmiar Integer[] w usłudze
configArray[4], 1 oznacza, że usługa ma wartość Long
configArray[5], liczba oznacza rozmiar Long[] w usłudze
configArray[6], 1 oznacza, że usługa ma wartość Float
configArray[7], liczba oznacza rozmiar Float[] w usłudze
configArray[8] – liczba wskazuje rozmiar byte[] w usłudze.
Na przykład configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} oznacza, że właściwość ma wartość String, wartość Boolean, wartość Integer i 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 ma te pola:
| Pole |
Opis |
|---|
areaId |
Identyfikator tego obszaru. Zobacz Identyfikatory obszarów. |
minInt32Value i maxInt32Value |
- Opcjonalna wartość minimalna i maksymalna dla właściwości typu INT32 w czasie uruchamiania. W przypadku wszystkich innych typów musi wynosić 0. Ignorowane, jeśli obie wartości wynoszą 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 w czasie działania programu zmieni się wartość minimalna lub maksymalna. Wdróż
IVehicle#getMinMaxSupportedValue dla dynamicznej wartości minimalnej lub maksymalnej.
|
minInt64Value i maxInt64Value |
- Opcjonalna wartość minimalna i maksymalna dla właściwości typu INT64 w czasie uruchamiania. W przypadku wszystkich innych typów musi wynosić 0. Ignorowane, jeśli obie wartości wynoszą 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 w czasie działania programu zmieni się wartość minimalna lub maksymalna. Wdróż
IVehicle#getMinMaxSupportedValue dla dynamicznej wartości minimalnej lub maksymalnej.
|
minFloatValue i maxFloatValue |
- Opcjonalna wartość minimalna i maksymalna dla właściwości typu Float w czasie rozruchu. W przypadku wszystkich innych typów musi wynosić 0. Ignorowane, jeśli obie wartości wynoszą 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 w czasie działania programu zmieni się wartość minimalna lub maksymalna. Wdróż
IVehicle#getMinMaxSupportedValue dla dynamicznej wartości minimalnej lub maksymalnej.
|
(Nowość w Androidzie 14)
supportedEnumValues |
- Opcjonalna lista obsługiwanych wartości w momencie uruchomienia, jeśli właściwość jest zdefiniowana jako właściwość typu wyliczeniowego. Jeśli nie jest określona (pusta) lub przed Androidem 14, zakłada się, że wszystkie wartości wyliczeniowe są obsługiwane.
- W przypadku usługi globalnej, jeśli trzeba zdefiniować obsługiwane wartości wyliczeniowe, należy użyć jednej konfiguracji obszaru z identyfikatorem obszaru 0.
- Ta wartość jest statyczna i nie zmieni się, nawet jeśli obsługiwane wartości ulegną zmianie w czasie działania programu. W przypadku dynamicznie obsługiwanych wartości zaimplementuj
IVehicle#getSupportedValuesLists.
- Dotyczy to tylko właściwości typu wyliczeniowego. W przypadku innych typów to pole musi być puste.
Aby udostępnić obsługiwane wartości dla innych typów niebędących wyliczeniami, użyj
IVehicle#getSupportedValuesLists.
|
(Nowość w Androidzie 15)
supportVariableUpdateRate |
- Czy obsługiwana jest zmienna częstotliwość aktualizacji. Dotyczy to tylko usług ciągłych.
- Jeśli ta wartość 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 (czyli traktować właściwości ciągłe jako właściwości zmieniające się).
- Jeśli wszyscy subskrybenci usługi włączą zmienną częstotliwość aktualizacji, żądanie subskrypcji do VHAL włączy zmienną częstotliwość aktualizacji usługi, a VHAL musi wysyłać zdarzenia aktualizacji usługi tylko wtedy, gdy zmieni się wartość usługi.
- Jeśli którykolwiek z subskrybentów zażąda stałej częstotliwości aktualizacji, żądanie subskrypcji do VHAL wyłączy zmienną częstotliwość aktualizacji właściwości, a AAOS odfiltruje zduplikowane zdarzenia dla klientów, którzy zażądali zmiennej częstotliwości aktualizacji.
- ZALECAMY obsługę zmiennej częstotliwości aktualizacji wszystkich właściwości ciągłych innych niż sygnał rytmu serca, aby zwiększyć wydajność, chyba że dane właściwości są duże (np. tablica bajtów o rozmiarze 1 KB) i mogą zajmować dużą ilość pamięci na potrzeby buforowania.
|
(Nowość w Androidzie 16)
hasSupportedValueInfo |
- Jeśli nie jest to
null, pokazuje, czy ta właściwość określa minimalne lub maksymalne obsługiwane wartości lub listę obsługiwanych wartości.
- To pole określa, czy dynamiczne interfejsy API obsługiwanych wartości:
getMinMaxSupportedValue, getSupportedValuesLists,subscribeSupportedValueChange, unsubscribeSupportedValueChange są obsługiwane w przypadku tego identyfikatora usługi i identyfikatora obszaru.
- Jeśli nie
null, VHAL musi zaimplementować te interfejsy API dla tego identyfikatora usługi i identyfikatora obszaru.
- Jeśli
null lub na urządzeniu z Androidem 15 lub starszym, dynamiczne obsługiwane wartości tego identyfikatora właściwości i identyfikatora obszaru nie są obsługiwane. Klient musi używać statycznych informacji o obsługiwanych wartościach podanych w konfiguracji właściwości pojazdu.
|
Typy obszarów
Zdefiniowane jako wyliczenia w VehicleArea.aidl. Obsługiwane typy obszarów znajdziesz poniżej.
| Typ obszaru |
Wartość |
Opis |
|---|
| Cały świat |
0x01000000 |
Ta usługa jest usługą globalną i nie ma wielu obszarów. |
| OKNO |
0x03000000 |
Obszar na podstawie okien, korzysta z wyliczenia VehicleAreaWindow. |
| MIRROR |
0x04000000 |
Obszar na podstawie luster, korzysta z wyliczenia VehicleAreaMirror. |
| SEAT |
0x05000000 |
Obszar na podstawie miejsc, używa wyliczenia VehicleAreaSeat. |
| DOOR |
0x06000000 |
Obszar na podstawie drzwi, korzysta z wyliczenia VehicleAreaDoor. |
| KOŁO |
0x07000000 |
Obszar na podstawie kół, korzysta z VehicleAreaWheel enum. |
Każda właściwość podzielona na strefy musi korzystać ze wstępnie zdefiniowanego typu obszaru. Każdy typ obszaru ma zestaw flag bitowych zdefiniowanych w wyliczeniu dla danego typu obszaru. Na przykład obszar SEAT definiuje wyliczenia 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 przypadku nieruchomości podzielonych na strefy stosuje się identyfikatory obszarów. Każda nieruchomość podzielona na strefy może obsługiwać co najmniej 1 identyfikator obszaru. Identyfikator obszaru składa się z co najmniej 1 flagi z odpowiedniego wyliczenia. Na przykład usługa korzystająca z VehicleAreaSeat może używać tych identyfikatorów obszaru:
| Produkt |
Opis |
|---|
ROW_1_LEFT | ROW_1_RIGHT |
Identyfikator obszaru dotyczy obu przednich foteli. |
ROW_2_LEFT |
Dotyczy tylko lewego tylnego siedzenia. |
ROW_2_RIGHT |
Dotyczy tylko prawego tylnego siedzenia. |
Więcej informacji znajdziesz w sekcji HVAC.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-10-10 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-10-10 UTC."],[],[]]