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.