Estendi 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 numerose informazioni sui VHAL inclusi nomi, descrizioni e significato dei valori. Le informazioni vengono estratte dai metadati delle proprietà VHAL, che sono codificate 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 questo problema, puoi scrivere le tue descrizioni in formato JSON e inserirle nell'immagine del tuo 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). Si prevede che i file JSON siano costituiti da una serie di oggetti Enum come mostrato di seguito.

Oggetto enum

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

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

ValoreOggetto

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

Per VehicleProperty , il nome Enum descrive come questa proprietà viene visualizzata nella finestra VHAL dell'emulatore. Il valore è il property_id della proprietà descritta da ValueObject . data_enum associa ValueObject con un altro Enum . Questa associazione viene utilizzata per mappare un valore in una stringa leggibile dall'uomo ed esiste solo per ValueObjects Enum per VehicleProperty . Di seguito è mostrato un esempio di VehicleProperty :

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

In questo esempio, come name per CURRENT_GEAR viene fornito un property_id con il value 289408001 . Nell'emulatore, questa proprietà è già codificata come nome, Current Gear . (Non è possibile riprodurre questo scenario poiché questa pagina è stata creata dopo aver rimosso tutte le proprietà codificate a scopo dimostrativo.)

Figura 1. VehicleProperty definita con nome e valore.

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

data_enum

Nell'esempio sopra, il valore visualizzato è 4 quando la marcia è impostata su P .

Figura 2. Valore visualizzato come 4.

Come previsto, nella scheda Proprietà VHAL nell'emulatore, il nome appare come CURRENT_GEAR . Ciò è in contrasto con l'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ù, vedere la definizione AIDL .

Come definito nell'AIDL, il valore della marcia Park è 4 , il che significa che è necessario tradurre il valore 4 in P . Questo è quando usi data_enum , che mappa questo valore di proprietà su una stringa leggibile dall'uomo in un altro Enum . L'emulatore utilizza questa mappa per tradurre i valori delle proprietà. Per 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 Enum denominata VehicleGear per tradurre il valore della proprietà. Aggiungi un'altra Enum denominata VehicleGear con il valore che è un array di ValueObject , dove il valore della proprietà (con il valore) dovrebbe essere visualizzato come nome.

Figura 3. Valore visualizzato come GEAR_PARK.

Nella scheda Proprietà VHAL per l'emulatore, il nome viene aggiornato per leggere CURRENT_GEAR , come previsto. Il valore della proprietà 4 viene visualizzato come GEAR_PARK .

Utilizza i metadati JSON per estendere le proprietà VHAL

Per utilizzare i metadati JSON per estendere le proprietà VHAL, esegui questo script Python (contenuto nel sorgente Android) per generare la proprietà estesa JSON 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 delle proprietà VHAL dell'emulatore.

Aggiungi metadati JSON all'immagine di sistema

Tieni presente che il nome file deve terminare con -types-meta.json . In caso contrario, il file viene ignorato.

Aggiungi una destinazione di compilazione

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 in out/target/product/{your_target_path}/ , la radice dell'output di destinazione creato.