Estendere le descrizioni delle proprietà VHAL nell'emulatore

Il sistema operativo Android Automotive (AAOS) contiene proprietà VHAL comuni che possono essere visualizzate nella finestra VHAL di un emulatore. Di conseguenza, puoi visualizzare una grande quantità di informazioni su VHAL, inclusi nomi, descrizioni e significato dei valori. Le informazioni vengono ricavate dai metadati delle proprietà VHAL, che sono hardcoded nell'emulatore QEMU.

Quando aggiungi le tue proprietà VHAL per uso 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. Per risolvere il problema, puoi scrivere le tue descrizioni in formato JSON e aggiungerle all'immagine di sistema.

Panoramica

Questa pagina descrive in dettaglio 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 del dispositivo virtuale Android (AVD). I file JSON dovrebbero essere costituiti da un array di oggetti Enum come mostrato di seguito.

Oggetto Enum

L'oggetto Enum con il nome VehicleProperty è un caso speciale in That che puoi considerare come una radice. I relativi contenuti vengono aggiunti alla mappa delle proprietà del veicolo. Altri Enums (con un nome diverso da VehicleProperty) definiscono le mappe dei nomi dei valori personalizzati.

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

ValueObject

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

Per VehicleProperty, il nome Enum descrive come viene visualizzata questa proprietà nella finestra VHAL dell'emulatore. Il valore è il 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 e esiste solo per ValueObjects nel 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 viene fornito come name per CURRENT_GEAR. Nell'emulatore, questa proprietà è già hardcoded come nome Current Gear. Non puoi riprodurre questo scenario perché questa pagina è stata creata dopo la rimozione di tutte le proprietà predefinite per scopi dimostrativi.

Figura 1. Proprietà veicolo definita con nome e valore.

Nella scheda Proprietà VHAL dell'emulatore, il nome viene aggiornato in modo da leggere CURRENT_GEAR come previsto.

data_enum

Nell'esempio precedente, il valore visualizzato è 4 quando la leva è impostata su P.

Figura 2. Valore visualizzato come 4.

Come previsto, nella scheda VHAL Properties (Proprietà VHAL) dell'emulatore, il nome visualizzato è CURRENT_GEAR. Diversamente dall'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 la definizione di AIDL.

Come definito nell'AIDL, il valore della marcia Parcheggio è 4, il che significa che devi tradurre il valore 4 in P. In questo caso, utilizza data_enum, che mappa questo valore della proprietà a una stringa leggibile in un altro data_enum.Enum L'emulatore utilizza 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 di 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 Proprietà VHAL per l'emulatore, il nome viene aggiornato in modo da leggere 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 (contenuto nel codice sorgente di Android) per generare il JSON della proprietà estesa dalle informazioni nell'AIDL.

Il JSON risultante include alcuni valori ridondanti, come 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 della proprietà VHAL dell'emulatore.

Aggiungere 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.

Aggiungere un target di compilazione

Aggiungi il file -types-meta.json a PRODUCT_COPY_FILE. Ad esempio:

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

Questo codice copia il file in out/target/product/{your_target_path}/, la directory principale dell'output del target compilato.