Android Automotive OS (AAOS) contient des propriétés VHAL courantes qui peuvent être consultées dans la fenêtre VHAL d'un émulateur. Vous pouvez ainsi consulter de nombreuses 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 l'émulateur QEMU.
Lorsque vous ajoutez vos propres propriétés VHAL à utiliser exclusivement sur vos appareils, l'affichage des métadonnées VHAL 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 ajouter à votre image système.
Présentation
Cette page explique 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 de l'appareil virtuel Android (AVD). Les fichiers JSON doivent se composer d'un tableau d'objets Enum
, comme illustré ci-dessous.
Objet enum
L'objet Enum
portant le nom VehicleProperty
est un cas particulier, car vous pouvez le considérer comme une racine. Son contenu est ajouté à la carte des propriétés des véhicules. Les autres Enums
(avec un nom autre que VehicleProperty
) définissent des mappages des noms des valeurs personnalisées.
Enum: { "name" : String, "values" : Array of { ValueObject } }
ValueObject
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
Pour VehicleProperty
, le nom Enum
décrit la façon dont cette propriété est affichée dans la fenêtre VHAL de l'émulateur. La valeur correspond à l'property_id
de la propriété décrite par le ValueObject
.
data_enum
associe ValueObject
à un autre Enum
.
Cette association permet de mapper une valeur dans une chaîne lisible par l'humain et n'existe que pour ValueObjects
dans Enum
pour VehicleProperty
.
Voici un exemple de VehicleProperty
:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
Dans cet exemple, un 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 le nom Current Gear (Vitesse actuelle).
(Vous ne pouvez pas reproduire ce scénario, car cette page a été créée après la suppression de toutes les propriétés codées en dur à des fins de démonstration.)
Figure 1 : VehicleProperty défini avec un nom et une valeur.
Dans l'onglet Propriétés VHAL de l'émulateur, le nom est actualisé pour afficher CURRENT_GEAR
, comme prévu.
data_enum
Dans l'exemple ci-dessus, la valeur affichée est 4 lorsque la vitesse est définie sur P.
Figure 2. Valeur affichée sous la forme de 4.
Comme prévu, dans l'onglet VHAL Properties (Propriétés VHAL) de l'émulateur, le nom s'affiche sous la forme CURRENT_GEAR
. Contrairement à l'émulateur existant, où il est affiché 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 la définition de AIDL.
Comme indiqué dans l'AIDL, la valeur de la vitesse Park est 4, ce qui signifie que vous devez traduire la valeur 4 en P. C'est le cas lorsque vous utilisez data_enum
, qui mappe cette valeur de propriété à une chaîne lisible par l'humain dans un 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 } ] } ]
Ajoutez "data_enum": "VehicleGear"
pour que l'émulateur utilise un Enum
nommé VehicleGear
pour traduire la valeur de la propriété. Ajoutez un autre Enum
nommé VehicleGear
, dont la valeur est un tableau de ValueObject
, où la valeur de la propriété (avec la valeur) doit s'afficher sous forme de nom.
Figure 3. Valeur affichée sous la forme GEAR_PARK.
Dans l'onglet VHAL Properties (Propriétés VHAL) de l'émulateur, le nom est actualisé pour afficher CURRENT_GEAR
, comme prévu. La valeur de la propriété 4
s'affiche sous la forme GEAR_PARK
.
Utiliser des métadonnées JSON pour étendre les propriétés VHAL
Pour utiliser des métadonnées JSON pour étendre vos propriétés VHAL, exécutez ce script Python (contenant la source Android) pour générer le fichier JSON de la propriété étendue à partir des informations de l'AIDL.
Le fichier JSON généré 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'affectent pas ce qui s'affiche dans la fenêtre de propriété VHAL de l'émulateur.
Ajouter des métadonnées JSON à l'image système
N'oubliez pas qu'un nom de fichier doit se terminer par -types-meta.json
. Sinon, le fichier est ignoré.
Ajouter une cible de compilation
Ajoutez le fichier -types-meta.json
au 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}/
, la racine de la sortie cible compilée.