Konfiguracje usługi

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.
minSampleRatemaxSampleRate 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. minSampleRatemaxSampleRate 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 stringValuewartości właściwości Pojazd.
BOOLEAN 0x00200000 Właściwość Boolean korzysta z pierwszego elementu w polu int32ValuesWłaściwości pojazdu. 0 oznacza false, a None 0 – true.
INT32 0x00400000 Właściwość Integer korzysta z pierwszego elementu w polu int32ValuesWłaściwości pojazdu.
INT32_VEC 0x00410000 Właściwość Integer[] korzysta z elementów w polu int32ValuesWłaściwości pojazdu.
INT64 0x00500000 Właściwość typu long, która używa pierwszego elementu w polu int64Valueswartości właściwości pojazdu.
INT64_VEC 0x00510000 Właściwość Long[] korzysta z elementów w polu int64ValuesWłaściwości pojazdu.
FLOAT 0x00600000 Właściwość Float korzysta z pierwszego elementu w polu floatValuesWłaściwości pojazdu.
FLOAT_VEC 0x00610000 Właściwość Float[] korzysta z elementów w polu floatValuesWłaściwości pojazdu.
BYTES 0x00700000 Właściwość byte[] korzysta z elementów w polu byteValuesWł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.
minInt32ValuemaxInt32Value
  • 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.
minInt64ValuemaxInt64Value
  • 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.
minFloatValuemaxFloatValue
  • 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.