Rozszerz opisy właściwości VHAL w emulatorze

System operacyjny Android Automotive (AAOS) zawiera popularne właściwości VHAL, które mogą w oknie VHAL emulatora. Dzięki temu masz dostęp do mnóstwa informacji, o kodach VHAL, w tym o nazwach, opisach i znaczeniu wartości. Informacja jest wyodrębnionych z metadanych właściwości VHAL, które są zakodowane na stałe w Emulator QEMU.

Gdy dodasz własne właściwości VHAL do wyłącznego użytku na urządzeniach, wyświetlanie metadanych VHAL w oknie VHAL wymaga zmodyfikowania kodu i stworzenia niestandardowego emulatora QEMU. Do możesz obejść ten problem, możesz utworzyć własne opisy w formacie JSON i przesłać je do systemu .

Omówienie

Na tej stronie dowiesz się, jak rozszerzyć opisy właściwości VHAL w emulatorze AAOS.

Utwórz metadane JSON w celu rozszerzenia właściwości VHAL

Emulator szuka dodatkowych metadanych we wszystkich plikach z rozszerzeniem -types-meta.json. w ścieżce urządzenia wirtualnego z Androidem (AVD). Pliki JSON powinny zawierać tablicę Enum obiektów jak pokazano poniżej.

Obiekt typu enum

Obiekt Enum o nazwie VehicleProperty jest specjalnym przypadkiem, który można traktować go jako pierwiastek. Jego zawartość jest dodawana do mapy właściwości pojazdu. Inny powód Enums (o nazwie innej niż VehicleProperty) – zdefiniuj mapy nazw niestandardowych.

Enum: {
  "name" : String,
  "values" : Array of { ValueObject }
}  

Obiekt wartości

ValueObject: {
  "name" : String,
  "value" : Integer,
  "data_enum" : String, VehicleProperty only, optional,
}

W przypadku VehicleProperty nazwa Enum opisuje, jak jest wyświetlana w oknie VHAL emulatora. Wartość to property_id właściwości opisanej w dokumencie ValueObject. data_enum wiąże element ValueObject z innym elementem Enum. To powiązanie służy do mapowania wartości na zrozumiały dla człowieka ciąg znaków i istnieje tylko w przypadku ValueObjects w: Enum dla: VehicleProperty. Przykładowy element VehicleProperty jest widoczny poniżej:

[
  {
      "name": "VehicleProperty",
      "values": [
          {
              "name": "CURRENT_GEAR",
              "value": 289408001
          }
      ]
  }
]

W tym przykładzie: property_id z wartością value wynoszącą 289408001 jest podawany jako name dla CURRENT_GEAR. W emulatorze ta właściwość jest już na stałe zakodowana jako nazwa Current Gear. (Nie da się odtworzyć tego scenariusza, ponieważ ta strona została utworzona po usunięciu wszystkich w celach demonstracyjnych).

Rysunek 1. Parametr Vehicleproperty zdefiniowany za pomocą nazwy i wartości.

Na karcie Właściwości VHAL emulatora nazwa jest odświeżana, aby można było odczytać dane. CURRENT_GEAR zgodnie z oczekiwaniami.

wyliczenie_danych

W tym przykładzie wyświetlana wartość to 4, gdy koło zębate jest ustawione na P.

Rysunek 2. Wartość wyświetlana jako 4.

Zgodnie z oczekiwaniami na karcie VHAL Właściwości w emulatorze nazwa będzie wyglądać tak: CURRENT_GEAR W przeciwieństwie do istniejącego emulatora, w którym jest wyświetlany jako P.

enum VehicleGear {
  GEAR_UNKNOWN = 0x0000,
  GEAR_NEUTRAL = 0x0001,
  GEAR_REVERSE = 0x0002,
  GEAR_PARK = 0x0004,
  GEAR_DRIVE = 0x0008,
  GEAR_1 = 0x0010,
  GEAR_2 = 0x0020,
  GEAR_3 = 0x0040,
  GEAR_4 = 0x0080,
  GEAR_5 = 0x0100,
  GEAR_6 = 0x0200,
  GEAR_7 = 0x0400,
  GEAR_8 = 0x0800,
  GEAR_9 = 0x1000,
}

Aby dowiedzieć się więcej, przeczytaj AIDL, definicji.

Zgodnie z definicją w AIDL wartością sprzętu Park jest 4, co oznacza oznacza, że trzeba przetłumaczyć wartość 4 na P. W tym momencie użyj dyrektywy data_enum, która mapuje wartość właściwości na zrozumiały dla człowieka ciąg znaków w innym Enum Emulator używa tej mapy do tłumaczenia wartości usług. Na przykład:

[
    {
        "name": "VehicleProperty",
        "values": [
            {
                "name": "CURRENT_GEAR",
                "value": 289408001,
                "data_enum": "VehicleGear"
            }
        ]
    },
    {
        "name": "VehicleGear",
        "values": [
            {
                "name": "GEAR_UNKNOWN",
                "value": 0
            },
            {
                "name": "GEAR_PARK",
                "value": 4
            }
        ]
    }

]

Dodaj "data_enum": "VehicleGear", aby emulator używał parametru Enum VehicleGear, by przetłumaczyć wartość właściwości. Dodaj kolejny Enum o nazwie VehicleGear, a wartością jest tablica ValueObject, gdzie wartość właściwości (z wartością) powinna być wyświetlana jako nazwa.

Rysunek 3. Wartość wyświetlana jako GEAR_PARK.

Na karcie Właściwości VHAL emulatora nazwa jest odświeżana, aby można było odczytać nazwę. CURRENT_GEAR zgodnie z oczekiwaniami. Wartość właściwości 4 jest wyświetlana jako GEAR_PARK

Używanie metadanych JSON do rozszerzania właściwości VHAL

Aby użyć metadanych JSON do rozszerzenia właściwości VHAL, uruchom Skrypt w Pythonie (zawarte w źródle Androida) w celu wygenerowania rozszerzonego kodu JSON właściwości na podstawie informacji w AIDL.

Powstały kod JSON zawiera nadmiarowe wartości, takie jak change_mode, access i unit. Chociaż informacje te należą do usługi VHAL, te wartości JSON nie mają wpływu na zawartość wyświetlaną w oknie właściwości VHAL emulatora.

Dodaj metadane JSON do obrazu systemu

Pamiętaj, że nazwa pliku musi kończyć się na -types-meta.json. Jeśli nie, zignorowano.

Dodaj cel kompilacji

Dodaj plik -types-meta.json do PRODUCT_COPY_FILE. Dla: przykład:

PRODUCT_COPY_FILES += \
    device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json

Ten kod powoduje skopiowanie pliku do katalogu głównego out/target/product/{your_target_path}/, gotowego docelowego wyniku.