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.