Estender as descrições de propriedade VHAL no emulador

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.