O Android Automotive OS (AAOS) contém propriedades VHAL comuns que podem ser visualizadas na janela VHAL de um emulador. Como resultado, você pode visualizar uma abundância de informações sobre VHALs, incluindo nomes, descrições e o significado dos valores. As informações são extraídas dos metadados das propriedades VHAL, que são codificadas no emulador QEMU .
Quando você adiciona suas próprias propriedades VHAL para uso exclusivo em seus dispositivos, a exibição de metadados VHAL na janela VHAL exige que você modifique o código e construa um emulador QEMU customizado. Para contornar isso, você pode escrever suas próprias descrições no formato JSON e colocá-las na imagem do sistema.
Visão geral
Esta página detalha como você pode estender as descrições de propriedades VHAL em um emulador AAOS.
Crie metadados JSON para estender as propriedades VHAL
O emulador procura metadados adicionais em todos os arquivos que terminam com -types-meta.json
no caminho do Android Virtual Device (AVD). Espera-se que os arquivos JSON consistam em uma matriz de objetos Enum
, conforme mostrado abaixo.
Enum objeto
O objeto Enum
com o nome VehicleProperty
é um caso especial em que você pode considerá-lo como uma raiz. Seu conteúdo é adicionado ao mapa de propriedades do veículo. Outros Enums
(com um nome diferente de VehicleProperty
) definem mapas dos nomes dos valores personalizados.
Enum: { "name" : String, "values" : Array of { ValueObject } }
ValueObject
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
Para VehicleProperty
, o nome Enum
descreve como essa propriedade é exibida na janela VHAL do emulador. O valor é o property_id
da propriedade descrita pelo ValueObject
. data_enum
associa ValueObject
com outro Enum
. Essa associação é usada para mapear um valor em uma string legível por humanos e existe apenas para ValueObjects
no Enum
para o VehicleProperty
. Um exemplo de VehicleProperty
é mostrado abaixo:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
Neste exemplo, um 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 . (Você não pode reproduzir este cenário porque esta página foi criada após a remoção de todas as propriedades codificadas 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 o esperado.
data_enum
No exemplo acima, o valor exibido é 4 quando a marcha está em P .
Figura 2. Valor exibido como 4.
Conforme pretendido, na guia Propriedades VHAL no emulador, o nome aparece como CURRENT_GEAR
. Isso contrasta com o emulador existente, onde é 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 definição AIDL .
Conforme definido no AIDL, o valor de Park gear é 4 , o que significa que você precisa converter o valor 4 em P . Isso ocorre quando você usa data_enum
, que mapeia esse valor de propriedade para uma string legível por humanos em outro Enum
. O emulador usa esse mapa para converter valores de propriedade. Por 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 um Enum
chamado VehicleGear
para traduzir o valor da propriedade. Adicione outro Enum
chamado VehicleGear
com o valor sendo uma matriz de ValueObject
, onde o valor da propriedade (com o valor) deve ser exibido como um nome.
Figura 3. Valor exibido como GEAR_PARK.
Na guia Propriedades VHAL do emulador, o nome é atualizado para ler CURRENT_GEAR
, conforme esperado. O valor da propriedade de 4
é exibido como GEAR_PARK
.
Use metadados JSON para estender propriedades VHAL
Para usar metadados JSON para estender suas propriedades VHAL, execute este script Python (contido na origem do Android) para gerar a propriedade estendida JSON a partir de informações no 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 é exibido na janela de propriedades VHAL do emulador.
Adicionar metadados JSON à imagem do sistema
Lembre-se de que um nome de arquivo deve terminar com -types-meta.json
. Caso contrário, o arquivo é ignorado.
Adicionar um destino de compilação
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 em out/target/product/{your_target_path}/
, a raiz da saída de destino criada.