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.