Estendi le descrizioni delle proprietà VHAL nell'emulatore

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.