Étendre la description des propriétés VHAL dans l'émulateur

Android Automotive OS (AAOS) contient des propriétés VHAL courantes qui peuvent dans la fenêtre VHAL d'un émulateur. Vous avez ainsi accès à une multitude d'informations sur les VHAL, y compris les noms, les descriptions et la signification des valeurs. Les informations sont extraites des métadonnées des propriétés VHAL, qui sont codées en dur dans QEMU.

Afficher les métadonnées VHAL lorsque vous ajoutez vos propres propriétés VHAL pour une utilisation exclusive sur vos appareils dans la fenêtre VHAL nécessite de modifier le code et de créer un émulateur QEMU personnalisé. À Pour contourner ce problème, vous pouvez écrire vos propres descriptions au format JSON et les envoyer à votre système l'image.

Présentation

Cette page explique en détail comment étendre les descriptions des propriétés VHAL dans un émulateur AAOS.

Créer des métadonnées JSON pour étendre les propriétés VHAL

L'émulateur recherche des métadonnées supplémentaires dans tous les fichiers se terminant par -types-meta.json. dans le chemin d'accès à l'appareil virtuel Android. Les fichiers JSON doivent être composés d'un tableau Enum, comme indiqué ci-dessous.

Objet Enum

L'objet Enum nommé VehicleProperty est un cas particulier dans That vous pouvez le considérer comme une racine. Son contenu est ajouté à la carte des propriétés du véhicule. Autre Enums (avec un nom autre que VehicleProperty) définit les mappages des noms des valeurs personnalisées.

Enum: {
  "name" : String,
  "values" : Array of { ValueObject }
}  

Objet Valeur

ValueObject: {
  "name" : String,
  "value" : Integer,
  "data_enum" : String, VehicleProperty only, optional,
}

Pour VehicleProperty, le nom Enum décrit comment s'affiche dans la fenêtre VHAL de l'émulateur. Cette valeur correspond au property_id de la propriété décrite par ValueObject. data_enum associe ValueObject à un autre Enum. Cette association est utilisée pour mapper une valeur dans une chaîne lisible par l'homme et n'existe que pour ValueObjects dans le Enum pour VehicleProperty. Voici un exemple de VehicleProperty:

[
  {
      "name": "VehicleProperty",
      "values": [
          {
              "name": "CURRENT_GEAR",
              "value": 289408001
          }
      ]
  }
]

Dans cet exemple, une property_id avec un value de 289408001 est fourni en tant que name pour CURRENT_GEAR. Dans l'émulateur, cette propriété est déjà codée en dur sous la forme d'un nom, Current Gear (Engrenage actuel). (Vous ne pouvez pas reproduire ce scénario, car cette page a été créée après avoir supprimé tous les éléments codés en dur à des fins de démonstration.)

Figure 1 : Élément VehicleProperty défini avec un nom et une valeur.

Dans l'onglet VHAL Properties (Propriétés VHAL) de l'émulateur, le nom est actualisé pour indiquer CURRENT_GEAR comme prévu.

énumération_données

Dans l'exemple ci-dessus, la valeur affichée est 4 lorsque la roue dentée est réglée sur P :

Figure 2. La valeur affichée est 4.

Comme prévu, dans l'onglet VHAL Properties (Propriétés VHAL) de l'émulateur, le nom s'affiche comme suit : CURRENT_GEAR Cela diffère de l'émulateur existant, où il s'affiche sous la forme 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,
}

Pour en savoir plus, consultez les AIDL définition.

Comme défini dans l'AIDL, la valeur de l'équipement Parking est de 4, soit signifie que vous devez convertir la valeur 4 en P. C’est à ce moment-là que Utilisez data_enum, qui mappe la valeur de cette propriété sur une chaîne lisible par l'humain dans une autre Enum L'émulateur utilise cette carte pour traduire les valeurs des propriétés. Exemple :

[
    {
        "name": "VehicleProperty",
        "values": [
            {
                "name": "CURRENT_GEAR",
                "value": 289408001,
                "data_enum": "VehicleGear"
            }
        ]
    },
    {
        "name": "VehicleGear",
        "values": [
            {
                "name": "GEAR_UNKNOWN",
                "value": 0
            },
            {
                "name": "GEAR_PARK",
                "value": 4
            }
        ]
    }

]

Ajout de "data_enum": "VehicleGear" afin que l'émulateur utilise un Enum VehicleGear pour convertir la valeur de la propriété. Ajouter un autre Enum nommé VehicleGear, dont la valeur est un tableau de ValueObject, où la valeur de la propriété (avec la valeur) doit être affichée en tant que nom.

Figure 3. La valeur affichée est GEAR_PARK.

Dans l'onglet VHAL Properties (Propriétés VHAL) de l'émulateur, le nom est actualisé pour indiquer CURRENT_GEAR, comme prévu. La valeur de la propriété de 4 s'affiche comme suit : GEAR_PARK

Utiliser des métadonnées JSON pour étendre les propriétés VHAL

Pour étendre vos propriétés VHAL à l'aide de métadonnées JSON, exécutez cette Script Python (figurant dans la source Android) pour générer le fichier JSON de propriété étendue à partir des informations de AIDL.

<ph type="x-smartling-placeholder">

Le fichier JSON obtenu inclut des valeurs redondantes, telles que change_mode, access et unit. Bien que ces informations fassent partie de la propriété VHAL, ces valeurs JSON n'ont aucune incidence sur ce qui s'affiche dans la fenêtre de propriétés VHAL de l'émulateur.

Ajouter des métadonnées JSON à l'image système

Notez qu'un nom de fichier doit se terminer par -types-meta.json. Sinon, le fichier est sont ignorées.

Ajouter une cible de compilation

Ajoutez le fichier -types-meta.json à PRODUCT_COPY_FILE. Par exemple :

PRODUCT_COPY_FILES += \
    device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json

Ce code copie le fichier dans out/target/product/{your_target_path}/, le répertoire racine de la sortie cible créée.