Erweitern Sie die VHAL-Eigenschaftsbeschreibungen im Emulator

Das Android Automotive OS (AAOS) enthält allgemeine VHAL-Eigenschaften, die im VHAL-Fenster eines Emulators angezeigt werden können. Dadurch können Sie eine Fülle von Informationen zu VHALs anzeigen, darunter Namen, Beschreibungen und die Bedeutung der Werte. Die Informationen werden aus den Metadaten der VHAL-Eigenschaften extrahiert, die im QEMU- Emulator fest codiert sind.

Wenn Sie Ihre eigenen VHAL-Eigenschaften zur ausschließlichen Verwendung auf Ihren Geräten hinzufügen, müssen Sie zum Anzeigen von VHAL-Metadaten im VHAL-Fenster den Code ändern und einen benutzerdefinierten QEMU-Emulator erstellen. Um dies zu umgehen, können Sie Ihre eigenen Beschreibungen im JSON-Format schreiben und diese in Ihr Systemabbild einfügen.

Überblick

Auf dieser Seite wird detailliert beschrieben, wie Sie VHAL-Eigenschaftsbeschreibungen in einem AAOS-Emulator erweitern können.

Erstellen Sie JSON-Metadaten, um VHAL-Eigenschaften zu erweitern

Der Emulator sucht in allen Dateien, die mit -types-meta.json enden, im Android Virtual Device (AVD)-Pfad nach zusätzlichen Metadaten. Von JSON-Dateien wird erwartet, dass sie aus einem Array von Enum Objekten bestehen, wie unten gezeigt.

Enum-Objekt

Das Enum Objekt mit dem Namen VehicleProperty ist ein Sonderfall, da man es als Root betrachten kann. Sein Inhalt wird der Fahrzeugeigenschaftenkarte hinzugefügt. Andere Enums (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,
}

Für VehicleProperty beschreibt der Enum -Name, wie diese Eigenschaft im VHAL-Fenster des Emulators angezeigt wird. Der Wert ist die property_id der durch ValueObject beschriebenen Eigenschaft. data_enum verknüpft ValueObject mit einem anderen Enum . Diese Zuordnung wird verwendet, um einen Wert in eine für Menschen lesbare Zeichenfolge abzubilden, und existiert nur für ValueObjects im Enum für VehicleProperty . Ein Beispiel für VehicleProperty ist unten dargestellt:

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

In diesem Beispiel wird eine property_id mit dem value 289408001 als name für CURRENT_GEAR bereitgestellt. Im Emulator ist diese Eigenschaft bereits als Name „ Current Gear“ fest codiert. (Sie können dieses Szenario nicht reproduzieren, da diese Seite erstellt wurde, nachdem alle fest codierten Eigenschaften zu Demonstrationszwecken entfernt wurden.)

Abbildung 1. VehicleProperty mit Name und Wert definiert.

Auf der Registerkarte „VHAL-Eigenschaften“ des Emulators wird der Name aktualisiert und lautet wie erwartet CURRENT_GEAR .

data_enum

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

Abbildung 2. Wert wird als 4 angezeigt.

Wie vorgesehen wird auf der Registerkarte „VHAL-Eigenschaften“ im Emulator der Name als CURRENT_GEAR angezeigt. Dies steht im Gegensatz zum vorhandenen Emulator, wo es als P angezeigt wird.

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 AIDL- Definition.

Gemäß der AIDL-Definition beträgt der Wert des Parkgangs 4 , was bedeutet, dass Sie den Wert 4 in P umrechnen müssen. Dies ist der Fall, wenn Sie data_enum verwenden, das diesen Eigenschaftswert einer für Menschen lesbaren Zeichenfolge in einem anderen Enum zuordnet. Der Emulator verwendet diese Karte, um Eigenschaftswerte zu übersetzen. Zum 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 eine Enum namens VehicleGear verwendet, um den Eigenschaftswert zu übersetzen. Fügen Sie eine weitere Enum mit dem Namen VehicleGear hinzu, wobei der Wert ein Array von ValueObject ist, in dem der Eigenschaftswert (mit dem Wert) als Name angezeigt werden soll.

Abbildung 3. Als GEAR_PARK angezeigter Wert.

Auf der Registerkarte „VHAL-Eigenschaften“ für den Emulator wird der Name wie erwartet aktualisiert und lautet nun CURRENT_GEAR . Der Eigenschaftswert 4 wird als GEAR_PARK angezeigt.

Verwenden Sie JSON-Metadaten, um VHAL-Eigenschaften zu erweitern

Um JSON-Metadaten zum Erweitern Ihrer VHAL-Eigenschaften zu verwenden, führen Sie dieses Python-Skript (in der Android-Quelle enthalten) aus, um die erweiterte Eigenschaft JSON aus Informationen in der AIDL zu generieren.

Der resultierende JSON enthält einige redundante Werte, z. B. change_mode “, access “ und „ unit . Obwohl diese Informationen Teil der VHAL-Eigenschaft sind, haben diese JSON-Werte keinen Einfluss darauf, was im VHAL-Eigenschaftsfenster des Emulators angezeigt wird.

Fügen Sie JSON-Metadaten zum Systemabbild hinzu

Beachten Sie, dass ein Dateiname mit -types-meta.json enden muss. Wenn nicht, wird die Datei ignoriert.

Fügen Sie ein Build-Ziel hinzu

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

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

Dieser Code kopiert die Datei nach out/target/product/{your_target_path}/ , dem Stammverzeichnis Ihrer erstellten Zielausgabe.