Ampliar las descripciones de propiedades de VHAL en el emulador

El sistema operativo Android Automotive (AAOS) contiene propiedades VHAL comunes que se pueden ver en la ventana VHAL de un emulador. Como resultado, puede ver una gran cantidad de información sobre los VHAL, incluidos nombres, descripciones y el significado de los valores. La información se extrae de los metadatos de las propiedades de VHAL, que están codificados en el emulador QEMU .

Cuando agrega sus propias propiedades VHAL para uso exclusivo en sus dispositivos, ver los metadatos de VHAL en la ventana VHAL requiere que modifique el código y cree un emulador QEMU personalizado. Para solucionar este problema, puede escribir sus propias descripciones en formato JSON y guardarlas en la imagen de su sistema.

Descripción general

Esta página detalla cómo puede ampliar las descripciones de las propiedades de VHAL en un emulador AAOS.

Cree metadatos JSON para ampliar las propiedades de VHAL

El emulador busca metadatos adicionales en todos los archivos que terminan en -types-meta.json en la ruta del Dispositivo virtual de Android (AVD). Se espera que los archivos JSON consten de una matriz de objetos Enum como se muestra a continuación.

Objeto de enumeración

El objeto Enum con el nombre VehicleProperty es un caso especial que puede considerar como raíz. Su contenido se agrega al mapa de propiedades del vehículo. Otras Enums (con un nombre distinto de VehicleProperty ) definen mapas de los nombres de los valores personalizados.

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

Objeto de valor

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

Para VehicleProperty , el nombre Enum describe cómo se muestra esta propiedad en la ventana VHAL del emulador. El valor es el property_id de la propiedad descrita por ValueObject . data_enum asocia ValueObject con otro Enum . Esta asociación se utiliza para asignar un valor a una cadena legible por humanos y existe solo para ValueObjects en Enum para VehicleProperty . A continuación se muestra un ejemplo de VehicleProperty :

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

En este ejemplo, se proporciona un property_id con un value de 289408001 como name para CURRENT_GEAR . En el emulador, esta propiedad ya está codificada como nombre, Current Gear . (No puede reproducir este escenario ya que esta página se creó después de eliminar todas las propiedades codificadas con fines de demostración).

Figura 1. VehicleProperty definida con nombre y valor.

En la pestaña Propiedades VHAL del emulador, el nombre se actualiza para leer CURRENT_GEAR como se esperaba.

enumeración_datos

En el ejemplo anterior, el valor mostrado es 4 cuando la marcha está configurada en P.

Figura 2. Valor mostrado como 4.

Como estaba previsto, en la pestaña Propiedades de VHAL en el emulador, el nombre aparece como CURRENT_GEAR . Esto contrasta con el emulador existente, donde se muestra como 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,
}

Para obtener más información, consulte la definición de AIDL .

Como se define en el AIDL, el valor de la marcha de estacionamiento es 4 , lo que significa que debe traducir el valor 4 a P. Esto es cuando usas data_enum , que asigna este valor de propiedad a una cadena legible por humanos en otro Enum . El emulador utiliza este mapa para traducir valores de propiedades. Por ejemplo:

[
    {
        "name": "VehicleProperty",
        "values": [
            {
                "name": "CURRENT_GEAR",
                "value": 289408001,
                "data_enum": "VehicleGear"
            }
        ]
    },
    {
        "name": "VehicleGear",
        "values": [
            {
                "name": "GEAR_UNKNOWN",
                "value": 0
            },
            {
                "name": "GEAR_PARK",
                "value": 4
            }
        ]
    }

]

Agregue "data_enum": "VehicleGear" para que el emulador use una Enum llamada VehicleGear para traducir el valor de la propiedad. Agregue otra Enum llamada VehicleGear con el valor como una matriz de ValueObject , donde el valor de la propiedad (con el valor) debe mostrarse como un nombre.

Figura 3. Valor mostrado como GEAR_PARK.

En la pestaña Propiedades de VHAL del emulador, el nombre se actualiza para leer CURRENT_GEAR , como se esperaba. El valor de propiedad de 4 se muestra como GEAR_PARK .

Utilice metadatos JSON para ampliar las propiedades de VHAL

Para utilizar metadatos JSON para ampliar sus propiedades VHAL, ejecute este script de Python (contenido en el código fuente de Android) para generar la propiedad extendida JSON a partir de la información del AIDL.

El JSON resultante incluye algunos valores redundantes, como change_mode , access y unit . Aunque esta información es parte de la propiedad VHAL, estos valores JSON no afectan lo que se muestra en la ventana de propiedades VHAL del emulador.

Agregue metadatos JSON a la imagen del sistema

Tenga en cuenta que un nombre de archivo debe terminar con -types-meta.json . De lo contrario, el archivo se ignora.

Agregar un objetivo de compilación

Agregue el archivo -types-meta.json a PRODUCT_COPY_FILE . Por ejemplo:

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

Este código copia el archivo en out/target/product/{your_target_path}/ , la raíz de la salida de destino creada.