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

System operacyjny Android Automotive (AAOS) zawiera typowe właściwości VHAL, które można przeglądać w oknie VHAL emulatora. W rezultacie możesz wyświetlić mnóstwo 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 .

Kiedy dodasz własne właściwości VHAL do wyłącznego użytku na swoich urządzeniach, przeglądanie metadanych VHAL w oknie VHAL wymaga modyfikacji kodu i zbudowania dostosowanego emulatora QEMU. Aby obejść ten problem, możesz napisać własne opisy w formacie JSON i umieścić je w obrazie systemu.

Przegląd

Na tej stronie szczegółowo opisano, w jaki sposób można rozszerzyć opisy właściwości VHAL w emulatorze AAOS.

Utwórz metadane JSON, aby rozszerzyć właściwości VHAL

Emulator szuka dodatkowych metadanych we wszystkich plikach kończących się na -types-meta.json w ścieżce urządzenia wirtualnego Android (AVD). Oczekuje się, że pliki JSON będą składać się z tablicy obiektów Enum , jak pokazano poniżej.

Obiekt wyliczeniowy

Obiekt Enum o nazwie VehicleProperty jest przypadkiem szczególnym, ponieważ można go uważać za pierwiastek. Jego zawartość zostanie dodana do mapy właściwości pojazdu. Inne Enums (o nazwie innej niż VehicleProperty ) definiują mapy nazw wartości 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 sposób wyświetlania tej właściwości w oknie VHAL emulatora. Wartość jest property_id właściwości opisanej przez ValueObject . data_enum kojarzy ValueObject z innym Enum . To powiązanie służy do mapowania wartości na ciąg znaków czytelny dla człowieka i istnieje tylko dla ValueObjects w Enum VehicleProperty . Przykład VehicleProperty pokazano poniżej:

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

W tym przykładzie property_id o value 289408001 jest podany jako name CURRENT_GEAR . W emulatorze ta właściwość jest już zakodowana na stałe jako nazwa Current Gear . (Nie możesz odtworzyć tego scenariusza, ponieważ ta strona została utworzona po usunięciu wszystkich zakodowanych na stałe właściwości w celach demonstracyjnych).

Rysunek 1. VehicleProperty zdefiniowana z nazwą i wartością.

Na karcie Właściwości VHAL emulatora nazwa jest odświeżana i wyświetla się zgodnie z oczekiwaniami CURRENT_GEAR .

dane_enum

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

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

Zgodnie z zamierzeniami na karcie Właściwości VHAL w emulatorze nazwa pojawia się jako CURRENT_GEAR . Kontrastuje to z istniejącym emulatorem, 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,
}

Aby dowiedzieć się więcej, zapoznaj się z definicją AIDL .

Zgodnie z definicją w AIDL, wartość biegu postojowego wynosi 4 , co oznacza, że ​​należy przełożyć wartość 4 na P. Dzieje się tak, gdy używasz data_enum , które odwzorowuje tę wartość właściwości na ciąg czytelny dla człowieka w innym Enum . Emulator używa tej mapy do tłumaczenia wartości właściwości. 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żył Enum o nazwie VehicleGear do przetłumaczenia wartości właściwości. Dodaj kolejne Enum o nazwie VehicleGear z wartością będącą tablicą ValueObject , gdzie wartość właściwości (wraz 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 do CURRENT_GEAR , zgodnie z oczekiwaniami. Wartość właściwości 4 jest wyświetlana jako GEAR_PARK .

Użyj metadanych JSON, aby rozszerzyć właściwości VHAL

Aby użyć metadanych JSON do rozszerzenia właściwości VHAL, uruchom ten skrypt w języku Python (zawarty w źródle systemu Android), aby wygenerować rozszerzoną właściwość JSON na podstawie informacji w AIDL.

Wynikowy kod JSON zawiera pewne nadmiarowe wartości, 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 emulatora.

Dodaj metadane JSON do obrazu systemu

Pamiętaj, że nazwa pliku musi kończyć się na -types-meta.json . Jeżeli nie, plik jest ignorowany.

Dodaj cel kompilacji

Dodaj plik -types-meta.json do 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 out/target/product/{your_target_path}/ , katalogu głównego zbudowanych docelowych wyników.