VHAL-Eigenschaftsbeschreibungen im Emulator erweitern

Android Automotive OS (AAOS) enthält gängige VHAL-Properties, die im VHAL-Fenster eines Emulators angezeigt werden können. So können Sie sich eine Vielzahl von Informationen zu VHALs ansehen, darunter Namen, Beschreibungen und die Bedeutung der Werte. Die Informationen werden aus den Metadaten von VHAL-Properties extrahiert, die im QEMU-Emulator hartcodiert sind.

Wenn Sie eigene VHAL-Properties zur ausschließlichen Verwendung auf Ihren Geräten hinzufügen, müssen Sie den Code ändern und einen benutzerdefinierten QEMU-Emulator erstellen, um VHAL-Metadaten im VHAL-Fenster aufzurufen. Sie können dieses Problem umgehen, indem Sie Ihre eigenen Beschreibungen im JSON-Format schreiben und in Ihr System-Image einfügen.

Übersicht

Auf dieser Seite wird beschrieben, wie Sie die Beschreibungen von VHAL-Properties in einem AAOS-Emulator erweitern können.

JSON-Metadaten zum Erweitern von VHAL-Properties erstellen

Der Emulator sucht im AVD-Pfad (Android Virtual Device) nach zusätzlichen Metadaten in allen Dateien, die auf -types-meta.json enden. JSON-Dateien sollten aus einem Array von Enum-Objekten bestehen, wie unten dargestellt.

Enum-Objekt

Das Enum-Objekt mit dem Namen VehicleProperty ist ein Sonderfall, den Sie als Wurzel betrachten können. Der Inhalt wird der Karte mit den Fahrzeugeigenschaften hinzugefügt. Andere Enums-Elemente (mit einem anderen Namen als VehicleProperty) definieren Zuordnungen der Namen der benutzerdefinierten Werte.

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

ValueObject

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

Bei VehicleProperty beschreibt der Name Enum, wie diese Property im VHAL-Fenster des Emulators angezeigt wird. Der Wert ist die property_id der durch die ValueObject beschriebenen Property. data_enum ordnet ValueObject einer anderen Enum zu. Diese Verknüpfung wird verwendet, um einen Wert in einen visuell lesbaren String abzubilden. Sie existiert nur für ValueObjects im Enum für die VehicleProperty. Hier ein Beispiel für VehicleProperty:

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

In diesem Beispiel wird eine property_id mit der value 289408001 als name für CURRENT_GEAR angegeben. Im Emulator ist diese Property bereits als Name Current Gear (Aktueller Gang) hartcodiert. Dieses Szenario lässt sich nicht reproduzieren, da diese Seite erstellt wurde, nachdem alle hartcodierten Properties zu Demonstrationszwecken entfernt wurden.

Abbildung 1: „VehicleProperty“, definiert mit Name und Wert.

Auf dem Tab VHAL-Eigenschaften des Emulators wird der Name wie erwartet zu CURRENT_GEAR aktualisiert.

data_enum

Im Beispiel oben ist der angezeigte Wert 4, wenn der Gang auf P eingestellt ist.

Abbildung 2: Der Wert wird als „4“ angezeigt.

Wie beabsichtigt, wird der Name im Emulator auf dem Tab VHAL-Properties als CURRENT_GEAR angezeigt. Im Vergleich dazu wird im vorhandenen Emulator P angezeigt.

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,
}

Weitere Informationen finden Sie in der Definition von AIDL.

Gemäß der Definition in der AIDL ist der Wert für den Gang Parken 4. Das bedeutet, dass Sie den Wert 4 in P umwandeln müssen. In diesem Fall verwenden Sie data_enum, um diesen Eigenschaftswert einem visuell lesbaren String in einer anderen Enum zuzuordnen. Der Emulator verwendet diese Zuordnung, um Property-Werte zu übersetzen. Beispiel:

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

]

Fügen Sie "data_enum": "VehicleGear" hinzu, damit der Emulator einen Enum mit dem Namen VehicleGear zum Übersetzen des Property-Werts verwendet. Fügen Sie eine weitere Enum mit dem Namen VehicleGear hinzu, deren Wert ein Array von ValueObject ist. Der Property-Wert (mit dem Wert) sollte als Name angezeigt werden.

Abbildung 3: Wert, der als GEAR_PARK angezeigt wird.

Auf dem Tab VHAL-Eigenschaften für den Emulator wird der Name wie erwartet zu CURRENT_GEAR aktualisiert. Der Attributwert von 4 wird als GEAR_PARK angezeigt.

VHAL-Properties mit JSON-Metadaten erweitern

Wenn Sie Ihre VHAL-Properties mit JSON-Metadaten erweitern möchten, führen Sie dieses Python-Script aus (enthalten in der Android-Quelle), um die erweiterte JSON-Property aus Informationen in der AIDL zu generieren.

Das resultierende JSON enthält einige redundante Werte, z. B. change_mode, access und unit. Diese Informationen sind zwar Teil der VHAL-Eigenschaft, haben aber keinen Einfluss darauf, was im Fenster „VHAL-Eigenschaft“ des Emulators angezeigt wird.

JSON-Metadaten zum System-Image hinzufügen

Der Dateiname muss auf -types-meta.json enden. Andernfalls wird die Datei ignoriert.

Buildziel hinzufügen

Fügen Sie der Datei PRODUCT_COPY_FILE die Datei -types-meta.json hinzu. Beispiel:

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

Mit diesem Code wird die Datei in out/target/product/{your_target_path}/ kopiert, das Stammverzeichnis der erstellten Zielausgabe.