Estenda as descrições das propriedades 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 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.