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.