Rozszerzanie opisów właściwości VHAL w emulatorze

System operacyjny Android Automotive (AAOS) zawiera typowe właściwości VHAL, które można wyświetlić w oknie VHAL emulatora. Dzięki temu możesz wyświetlić wiele informacji o VHAL, w tym nazwy, opisy i znaczenie wartości. Informacje są wyodrębniane z metadanych właściwości VHAL, które są zakodowane na stałe w emulatorze QEMU.

Gdy dodasz własne właściwości VHAL do wyłącznego użytku na swoich urządzeniach, wyświetlanie metadanych VHAL w oknie VHAL wymaga zmodyfikowania kodu i skompilowania niestandardowego emulatora QEMU. Aby tego uniknąć, możesz samodzielnie napisać opisy w formacie JSON i przekazać je do systemu.

Omówienie

Na tej stronie znajdziesz szczegółowe informacje o rozszerzaniu opisów właściwości VHAL w emulatorze AAOS.

Tworzenie metadanych w formacie JSON w celu rozszerzenia właściwości VHAL

Emulator wyszukuje dodatkowe metadane we wszystkich plikach kończących się na -types-meta.json na ścieżce urządzenia wirtualnego Androida (AVD). Pliki JSON powinny składać się z tablicy obiektów Enum, jak pokazano poniżej.

Obiekt typu enum

Obiekt Enum o nazwie VehicleProperty jest w tym przypadku przypadkiem szczególnym – możesz go traktować jako element wierzchołkowy. Jego zawartość jest dodawana do mapy właściwości pojazdu. Inne wartości Enums (z nazwą inną niż VehicleProperty) definiują mapy nazw wartości niestandardowych.

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

ValueObject

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

W przypadku VehicleProperty nazwa Enum określa sposób wyświetlania tej właściwości w oknie VHAL emulatora. Wartość to property_id właściwości opisanej przez ValueObject. data_enum wiąże ValueObject z innym Enum. To powiązanie służy do mapowania wartości na ciąg znaków zrozumiały dla człowieka i istnieje tylko w przypadku atrybutu ValueObjects w elementach Enum w elementach VehicleProperty. Przykład właściwości VehicleProperty:

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

W tym przykładzie property_idvalue 289408001 jest podawany jako name dla CURRENT_GEAR. W emulatorze ta właściwość jest już zaprogramowana jako nazwa Bieżący bieg. (nie możesz odtworzyć tego scenariusza, ponieważ strona została utworzona po usunięciu wszystkich właściwości zakodowanych na stałe na potrzeby demonstracji).

Rysunek 1. Właściwość pojazdu zdefiniowana za pomocą nazwy i wartości.

Na karcie Właściwości VHAL w emulatorze nazwa jest odświeżona i wyświetla się jako CURRENT_GEAR, zgodnie z oczekiwaniami.

data_enum

W powyższym przykładzie wyświetlana wartość to 4, gdy bieg jest ustawiony na P.

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

Zgodnie z oczekiwaniami na karcie Właściwości VHAL w emulatorze nazwa jest wyświetlana jako CURRENT_GEAR. W przeciwieństwie do dotychczasowego emulatora, w którym jest on 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,
}

Więcej informacji znajdziesz w definicji AIDL.

Zgodnie z definicją w AIDL wartość Park to 4, co oznacza, że musisz przetłumaczyć wartość 4 na P. W takim przypadku używasz atrybutu data_enum, który mapuje tę wartość właściwości na ciąg znaków zrozumiały dla człowieka w innym atrybucie Enum. Emulator używa tej mapy do tłumaczenia wartości właściwości. 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 emulować użycie Enum o nazwie VehicleGear do przetłumaczenia wartości właściwości. Dodaj kolejną właściwość Enum o nazwie VehicleGear, której wartość jest tablicą 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 w emulatorze nazwa jest odświeżona i wyświetla się jako CURRENT_GEAR, zgodnie z oczekiwaniami. Wartość właściwości 4 jest wyświetlana jako GEAR_PARK.

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

Aby użyć metadanych w formacie JSON do rozszerzenia właściwości VHAL, uruchom ten skrypt Pythona (znajdujący się w źródle Androida), aby wygenerować rozszerzoną właściwość JSON na podstawie informacji w pliku AIDL.

Wygenerowany kod JSON zawiera niektóre wartości nadmiarowe, takie jak change_mode, access i unit. Chociaż te informacje są częścią właściwości VHAL, te wartości JSON nie mają wpływu na to, co jest wyświetlane w oknie właściwości VHAL w emulatorze.

Dodawanie metadanych w formacie JSON do obrazu systemu

Pamiętaj, że nazwa pliku musi się kończyć na -types-meta.json. W przeciwnym razie plik zostanie zignorowany.

Dodawanie celu kompilacji

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

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

Ten kod kopiuje plik do katalogu out/target/product/{your_target_path}/, czyli katalogu głównego docelowego pliku.