El SO Android Automotive (AAOS) contiene propiedades de VHAL comunes que se pueden ver 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 se extrae de los metadatos de las propiedades de VHAL, que están codificados en el emulador de QEMU.
Cuando agregas tus propias propiedades de VHAL para uso exclusivo 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 este problema, puedes escribir tus propias descripciones en formato JSON y agregarlas a la imagen del sistema.
Descripción general
En esta página, se detalla cómo puedes extender las descripciones de 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 con -types-meta.json
en la ruta de acceso del dispositivo virtual de Android (AVD). Se espera que los archivos JSON consistan en un array de objetos Enum
, como se muestra a continuación.
Objeto de enum
El objeto Enum
con el nombre VehicleProperty
es un caso especial en el que puedes considerarlo como una raíz. Su contenido se agrega al mapa de propiedades del vehículo. Otros Enums
(con un nombre que no sea VehicleProperty
) definen mapas de los nombres de los valores personalizados.
Enum: { "name" : String, "values" : Array of { ValueObject } }
ValueObject
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 de VHAL del emulador. El valor es el 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 por humanos y solo existe 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 de forma fija como un nombre, Current Gear.
(No puedes reproducir esta situación, ya que esta página se creó después de quitar todas las propiedades codificadas para fines de demostración).
Figura 1: VehicleProperty definido con nombre y valor.
En la pestaña VHAL Properties del emulador, el nombre se actualiza para mostrar CURRENT_GEAR
como se espera.
data_enum
En el ejemplo anterior, el valor que se muestra es 4 cuando la marcha está configurada en P.
Figura 2: Valor que se muestra como 4.
Como se esperaba, 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 definición de AIDL.
Como se define en el AIDL, el valor de la marcha Park es 4, lo que significa que debes traducir el valor 4 a P. Esto ocurre cuando usas data_enum
, que asigna este valor de propiedad a una cadena legible por humanos en otra 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 } ] } ]
Agrega "data_enum": "VehicleGear"
para que el emulador use un Enum
llamado VehicleGear
para traducir el valor de la propiedad. Agrega otro Enum
llamado VehicleGear
con el valor de 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 para mostrar CURRENT_GEAR
, como se esperaba. El valor de la propiedad 4
se muestra como GEAR_PARK
.
Usa metadatos JSON para extender las propiedades de VHAL
Para usar metadatos JSON para extender tus propiedades de VHAL, ejecuta esta secuencia de comandos de Python (que se incluye en la fuente de Android) para generar el JSON de la propiedad extendida 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 forma parte de la propiedad 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 archivo debe terminar con -types-meta.json
. De lo contrario, se ignora el archivo.
Agrega un objetivo 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}/
, la raíz del resultado del destino compilado.