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 los nombres, las descripciones y el significado de los valores. La información se extrae de los metadatos de las propiedades VHAL, que están codificados en el emulador QEMU .
Cuando agrega sus propias propiedades de VHAL para uso exclusivo en sus dispositivos, la visualización de metadatos de VHAL en la ventana de VHAL requiere que modifique el código y cree un emulador de QEMU personalizado. Para evitar esto, puede escribir sus propias descripciones en formato JSON y colocarlas en la imagen de su sistema.
Descripción general
Esta página detalla cómo puede extender las descripciones de las propiedades 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 en el que se puede considerar como una raíz. Su contenido se añade al mapa de propiedades del vehículo. Otras Enums
(con un nombre que no sea 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 usa para asignar un valor a una cadena legible por humanos y existe solo para ValueObjects
en el 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 un 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 definido con nombre y valor.
En la pestaña Propiedades VHAL del emulador, el nombre se actualiza para leer CURRENT_GEAR
como se esperaba.
data_enum
En el ejemplo anterior, el valor mostrado es 4 cuando la marcha está en P .
Figura 2. Valor mostrado como 4.
Según lo 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 del engranaje de estacionamiento es 4 , lo que significa que debe traducir el valor 4 a P . Esto es cuando usa data_enum
, que asigna este valor de propiedad a una cadena legible por humanos en otro Enum
. El emulador usa este mapa para traducir valores de propiedad. 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 un Enum
llamado VehicleGear
para traducir el valor de la propiedad. Agregue otro Enum
llamado 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 para el emulador, el nombre se actualiza para leer CURRENT_GEAR
, como se esperaba. El valor de propiedad de 4
se muestra como GEAR_PARK
.
Use metadatos JSON para extender las propiedades VHAL
Para usar metadatos JSON para ampliar sus propiedades VHAL, ejecute este script de Python (que se encuentra en la 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.
Agregar metadatos JSON a la imagen del sistema
Tenga en cuenta que un nombre de archivo debe terminar con -types-meta.json
. Si no, 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.