O Android Automotive OS (AAOS) contém propriedades VHAL comuns que podem ser visualizadas na janela VHAL de um emulador. Como resultado, você pode encontrar uma abundância de informações sobre VHALs, incluindo nomes, descrições e o significado dos valores. As informações são extraídos dos metadados das propriedades VHAL, que são codificados no QEMU.
Quando você adiciona suas propriedades VHAL para uso exclusivo nos dispositivos, é possível conferir os metadados da VHAL. na janela VHAL, é necessário modificar o código e criar um emulador QEMU personalizado. Para uma solução alternativa, é possível escrever suas próprias descrições em formato JSON e imagem.
Visão geral
Esta página detalha como estender as descrições de propriedades VHAL em um emulador AAOS.
Criar metadados JSON para ampliar as propriedades VHAL
O emulador procura metadados adicionais em todos os arquivos que terminam com -types-meta.json
no caminho do Dispositivo virtual Android (AVD). Espera-se que os arquivos JSON consistam em uma matriz de
Enum
, conforme mostrado abaixo.
Objeto de tipo enumerado
O objeto Enum
com o nome VehicleProperty
é um caso especial
você pode considerá-lo como uma raiz. O conteúdo é adicionado ao mapa de propriedades do veículo. Outra opção
Enums
(com um nome diferente de VehicleProperty
) define mapas dos nomes
dos 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
, o nome Enum
descreve como isso
é exibida na janela VHAL do emulador. O valor é
property_id
da propriedade descrita pelo ValueObject
.
data_enum
associa ValueObject
a outro Enum
.
Esta associação é usada para mapear um valor em uma string legível e existe apenas para
ValueObjects
na Enum
da VehicleProperty
.
Veja abaixo um exemplo de VehicleProperty
:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
Neste exemplo, uma property_id
com um value
de
289408001 é fornecido como um name
para CURRENT_GEAR
.
No emulador, essa propriedade já está codificada como um nome, Current Gear.
Não é possível reproduzir este cenário porque esta página foi criada depois da remoção de todas as partes
propriedades para fins de demonstração.
Figura 1. VehicleProperty definido com nome e valor.
Na guia VHAL Properties do emulador, o nome é atualizado para ler:
CURRENT_GEAR
, conforme esperado.
tipo_de_dados
No exemplo acima, o valor exibido é 4 quando a engrenagem está definida como P:
Figura 2. Valor exibido como 4.
Como esperado, na guia VHAL Properties do emulador, o nome aparece como
CURRENT_GEAR
Isso contrasta com o emulador existente, em que é exibido 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 saber mais, consulte a AIDL (em inglês) definição.
Conforme definido na AIDL, o valor dos equipamentos de parque é 4, que
significa que você precisa converter o valor 4 em P. É quando você
use data_enum
, que mapeia o valor dessa propriedade para uma string legível em outra
Enum
. O emulador usa esse mapa para traduzir valores de propriedade. Exemplo:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001, "data_enum": "VehicleGear" } ] }, { "name": "VehicleGear", "values": [ { "name": "GEAR_UNKNOWN", "value": 0 }, { "name": "GEAR_PARK", "value": 4 } ] } ]
Adicione "data_enum": "VehicleGear"
para que o emulador use uma Enum
.
chamado VehicleGear
para traduzir o valor da propriedade. Adicionar outro Enum
chamada VehicleGear
, com o valor sendo uma matriz de ValueObject
, em que
o valor da propriedade (com o valor) deve ser exibido como um nome.
Figura 3. Valor exibido como GEAR_PARK.
Na guia VHAL Properties do emulador, o nome é atualizado para ler.
CURRENT_GEAR
, conforme esperado. O valor da propriedade 4
é exibido como
GEAR_PARK
.
Usar metadados JSON para estender as propriedades VHAL
Para usar metadados JSON e estender suas propriedades VHAL, execute este Script do Python (contidos na origem do Android) para gerar o JSON da propriedade estendida a partir das informações do a AIDL.
O JSON resultante inclui alguns valores redundantes, como change_mode
,
access
e unit
. Embora essas informações façam parte da propriedade VHAL,
esses valores JSON não afetam o que é mostrado na janela de propriedades VHAL do emulador.
Adicionar metadados JSON à imagem do sistema
Lembre-se de que o nome do arquivo precisa terminar com -types-meta.json
. Caso contrário, o arquivo será
ignorada.
Adicionar um destino de build
Adicione o arquivo -types-meta.json
ao PRODUCT_COPY_FILE
. Por
exemplo:
PRODUCT_COPY_FILES += \ device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json
Esse código copia o arquivo para out/target/product/{your_target_path}/
, o arquivo raiz
da saída de destino criada.