Android Automotive OS (AAOS) contiene proprietà VHAL comuni che possono nella finestra VHAL dell'emulatore. Di conseguenza, puoi visualizzare molte informazioni sulle VHAL, inclusi nomi, descrizioni e significato dei valori. Le informazioni sono estratti dai metadati delle proprietà VHAL, hardcoded nel emulatore QEMU.
Quando aggiungi le tue proprietà VHAL per l'utilizzo esclusivo sui tuoi dispositivi, la visualizzazione dei metadati VHAL nella finestra VHAL richiede la modifica del codice e la creazione di un emulatore QEMU personalizzato. A puoi scrivere le descrizioni in formato JSON e inserirle nel sistema dell'immagine.
Panoramica
Questa pagina descrive come estendere le descrizioni delle proprietà VHAL in un emulatore AAOS.
Crea metadati JSON per estendere le proprietà VHAL
L'emulatore cerca metadati aggiuntivi in tutti i file che terminano con -types-meta.json
nel percorso Dispositivo virtuale Android. I file JSON devono essere costituiti da un array di
Enum
oggetto come mostrato di seguito.
Oggetto enum
L'oggetto Enum
con il nome VehicleProperty
è un caso speciale in
puoi considerarlo come una radice. I suoi contenuti vengono aggiunti alla mappa delle proprietà del veicolo. Altro
Enums
(con un nome diverso da VehicleProperty
) definisce le mappe dei nomi
dei valori personalizzati.
Enum: { "name" : String, "values" : Array of { ValueObject } }
Valore oggetto
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
Per VehicleProperty
, il nome Enum
descrive come questo
viene visualizzata nella finestra VHAL dell'emulatore. Il valore corrisponde a
property_id
della proprietà descritta da ValueObject
.
data_enum
associa ValueObject
a un altro Enum
.
Questa associazione viene utilizzata per mappare un valore in una stringa leggibile ed esiste solo per
ValueObjects
in Enum
per il VehicleProperty
.
Di seguito è riportato un esempio di VehicleProperty
:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
In questo esempio, un property_id
con un value
di
289408001 è fornito come name
per CURRENT_GEAR
.
Nell'emulatore, il nome di questa proprietà è già impostato come hardcoded, Current Gear.
(Non puoi riprodurre questo scenario perché la pagina è stata creata dopo aver rimosso tutti gli elementi hardcoded
a scopo dimostrativo).
Figura 1. Veicolo proprietà definito con nome e valore.
Nella scheda Proprietà VHAL dell'emulatore, il nome viene aggiornato
CURRENT_GEAR
come previsto.
data_enum
Nell'esempio precedente, il valore visualizzato è 4 quando l'ingranaggio è impostato su P.
Figura 2. Valore visualizzato come 4.
Come previsto, nella scheda Proprietà VHAL nell'emulatore, il nome viene visualizzato
CURRENT_GEAR
. a differenza dell'emulatore esistente, dove viene visualizzato come
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, }
Per saperne di più, consulta AIDL definizione di Kubernetes.
Come definito nell'AIDL, il valore dell'attrezzatura per il Park è 4, ovvero
significa che devi tradurre il valore 4 in P. Questo è quando
usa data_enum
, che mappa questo valore della proprietà a una stringa leggibile in un'altra
Enum
. L'emulatore usa questa mappa per tradurre i valori delle proprietà. Ad esempio:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001, "data_enum": "VehicleGear" } ] }, { "name": "VehicleGear", "values": [ { "name": "GEAR_UNKNOWN", "value": 0 }, { "name": "GEAR_PARK", "value": 4 } ] } ]
Aggiungi "data_enum": "VehicleGear"
, in modo che l'emulatore utilizzi un Enum
denominato VehicleGear
per tradurre il valore della proprietà. Aggiungi un altro Enum
denominato VehicleGear
con il valore che è un array di ValueObject
, dove
il valore della proprietà (con il valore) deve essere visualizzato come nome.
Figura 3. Valore visualizzato come GEAR_PARK.
Nella scheda VHAL Properties (Proprietà VHAL) dell'emulatore, il nome viene aggiornato
CURRENT_GEAR
, come previsto. Il valore della proprietà 4
viene visualizzato come
GEAR_PARK
.
Utilizzare i metadati JSON per estendere le proprietà VHAL
Per utilizzare i metadati JSON per estendere le proprietà VHAL, esegui questo Script Python (contenuti nell'origine Android) per generare il codice JSON della proprietà estesa dalle informazioni in l'AIDL.
Il JSON risultante include alcuni valori ridondanti, ad esempio change_mode
,
access
e unit
. Sebbene queste informazioni facciano parte
della proprietà VHAL,
Questi valori JSON non influiscono su ciò che viene visualizzato nella finestra delle proprietà VHAL dell'emulatore.
Aggiungi metadati JSON all'immagine di sistema
Tieni presente che un nome file deve terminare con -types-meta.json
. In caso contrario, il file viene
ignorato.
Aggiungi un target di build
Aggiungi il file -types-meta.json
a PRODUCT_COPY_FILE
. Per
esempio:
PRODUCT_COPY_FILES += \ device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json
Questo codice copia il file nella cartella out/target/product/{your_target_path}/
dell'output di destinazione creato.