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 .
Ao adicionar suas próprias propriedades VHAL para uso exclusivo em seus dispositivos, a visualização dos metadados VHAL na janela VHAL exige que você modifique o código e crie um emulador QEMU personalizado. 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 das propriedades VHAL em um emulador AAOS.
Crie metadados JSON para estender 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.
Objeto enum
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. Outras Enums
(com um nome diferente de VehicleProperty
) definem mapas dos nomes dos valores personalizados.
Enum: { "name" : String, "values" : Array of { ValueObject } }
ValorObject
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
a outro Enum
. Essa associação é usada para mapear um valor em uma sequência legível por humanos e existe apenas para ValueObjects
no Enum
para VehicleProperty
. Um exemplo de VehicleProperty
é mostrado abaixo:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
Neste exemplo, um property_id
com value
289408001 é fornecido como name
para CURRENT_GEAR
. No emulador, essa propriedade já está codificada como um nome, Current Gear . (Você não pode reproduzir este cenário, pois esta página foi criada após a remoção de todas as propriedades codificadas para fins de demonstração.)
Figura 1. VehicleProperty definida com nome e valor.
Na guia Propriedades VHAL do emulador, o nome é atualizado para CURRENT_GEAR
conforme esperado.
dados_enum
No exemplo acima, o valor exibido é 4 quando a marcha está definida como P .
Figura 2. Valor exibido como 4.
Conforme pretendido, na guia Propriedades VHAL do 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 de AIDL .
Conforme definido no AIDL, o valor da engrenagem Park é 4 , o que significa que você precisa traduzir o valor 4 em P . É quando você usa data_enum
, que mapeia o valor dessa 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 um array 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 CURRENT_GEAR
, conforme esperado. O valor da propriedade 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 fonte Android) para gerar o JSON de propriedade estendida 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.
Adicione metadados JSON à imagem do sistema
Esteja ciente de que um nome de arquivo deve terminar com -types-meta.json
. Caso contrário, o arquivo será ignorado.
Adicione 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
Este código copia o arquivo em out/target/product/{your_target_path}/
, a raiz da saída de destino criada.