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 zur 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 Definition im AIDL 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 JSON-Eigenschaft 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.