Cómo extender las descripciones de propiedades de VHAL en el emulador

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

Cuando agregas tus propias propiedades de VHAL para usarlas de forma exclusiva en tus dispositivos, ver los metadatos de VHAL en la ventana de VHAL requiere que modifiques el código y compiles un emulador de QEMU personalizado. Para solucionar esto, puedes escribir tus propias descripciones en formato JSON y ellas en tu sistema imagen.

Descripción general

En esta página, se detalla cómo extender las descripciones de las propiedades de VHAL en un emulador de AAOS.

Crea metadatos JSON para extender las propiedades de VHAL

El emulador busca metadatos adicionales en todos los archivos que terminan en -types-meta.json en la ruta de acceso para dispositivos virtuales de Android (AVD). Se espera que los archivos JSON constan de un array de Enum, como se muestra a continuación.

Objeto Enum

El objeto Enum con el nombre VehicleProperty es un caso especial en That puedes considerarla como raíz. Su contenido se agrega al mapa de propiedades del vehículo. Otra opción Enums (con un nombre distinto de VehicleProperty) define 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,
}

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

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

En este ejemplo, un property_id con un value de 289408001 se proporciona como un name para CURRENT_GEAR. En el emulador, esta propiedad ya está hard-coded como un nombre, Current Gear. (No puedes reproducir esta situación, ya que esta página se creó después de quitar todas las reglas propiedades con fines de demostración).

Figura 1: VehicleProperty definido con nombre y valor.

En la pestaña VHAL Properties del emulador, el nombre se actualiza a ser leído. CURRENT_GEAR según lo esperado.

data_enum

En el ejemplo anterior, el valor que se muestra es 4 cuando el engranaje está establecido en P

Figura 2: El valor se muestra como 4.

Según lo previsto, en la pestaña VHAL Properties del emulador, el nombre aparece como CURRENT_GEAR Esto contrasta con el emulador existente, en el que 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, consulta la AIDL definición.

Según se define en el AIDL, el valor del engranaje Park es 4, lo que significa que debes traducir el valor 4 a P. Aquí es donde usa data_enum, que asigna este valor de propiedad a una cadena legible en otro Enum El emulador usa este mapa para traducir los valores de las 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
            }
        ]
    }

]

Se agregó "data_enum": "VehicleGear" para que el emulador use un Enum. con el nombre VehicleGear para traducir el valor de la propiedad. Agregar otra Enum llamado VehicleGear, cuyo valor es un array de ValueObject, en el que el valor de la propiedad (con el valor) se debe mostrar como un nombre.

Figura 3: Valor que se muestra como GEAR_PARK

En la pestaña VHAL Properties del emulador, el nombre se actualiza a ser leído. CURRENT_GEAR, como se esperaba. El valor de propiedad de 4 se muestra como GEAR_PARK

Usa metadatos JSON para extender las propiedades de VHAL

Si quieres usar metadatos JSON para extender tus propiedades de VHAL, ejecuta este comando: Secuencia de comandos de Python (se incluye en la fuente de Android) para generar la propiedad extendida JSON a partir de la información en el AIDL.

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

Agrega metadatos JSON a la imagen del sistema

Ten en cuenta que el nombre de un archivo debe terminar en -types-meta.json. Si no es así, el archivo se ignorados.

Agrega un destino de compilación

Agrega 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}/, el directorio de la salida objetivo compilada.