Konfiguracje usługi

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 READREAD_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.
minSampleRatemaxSampleRate 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 minSampleRatemaxSampleRate 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 stringValuewartoś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 int32ValuesWartość właściwości pojazdu.
INT64 0x00500000 Długa właściwość, która korzysta z pierwszego elementu w polu int64Valueswartości właściwości pojazdu.
INT64_VEC 0x00510000 Long[] korzysta z elementów w polu int64ValuesWartość 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 floatValuesWartość właściwości pojazdu.
BYTES 0x00700000 byte[] korzysta z elementów w polu byteValuesWartość 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.
minInt32ValuemaxInt32Value
  • 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.
minInt64ValuemaxInt64Value
  • 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.
minFloatValuemaxFloatValue
  • 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.