Implémentation de référence

Nous fournissons une implémentation de référence pour le VHAL AIDL. Le thread de service principal est implémenté à VehicleService.cpp. L'implémentation de l'interface VHAL se trouve à l'emplacement DefaultVehicleHal.cpp.

L'implémentation de référence est basée sur une architecture à deux couches. Sur la couche supérieure, DefaultVehicleHal implémente l'interface VHAL AIDL et fournit une logique VHAL générique pour tous les périphériques matériels. À la couche inférieure, FakeVehicleHardware implémente l'interface IVehicleHardware. Cette classe simule la logique VHAL d'interaction avec le matériel ou le bus du véhicule réel, et est spécifique à l'appareil. Les fournisseurs peuvent également adapter cette même architecture, réutiliser la même classe DefaultVehicleHal (en l'étendant pour écraser une méthode) et fournir leur propre implémentation IVehicleHardware.

Implémentation de référence de VHAL
Figure 1. Implémentation de référence de VHAL

DefaultVehicleHal contient la logique suivante, qui est considérée comme générique et peut s'appliquer à toute implémentation VHAL.

  • Implémente l'interface IVehicle.
  • Effectue des vérifications de base des entrées, y compris une vérification des identifiants en double.
  • Alloue des objets client (par exemple, GetValuesClient) pour chaque opération pour chaque client de liaison, et ajoute chacun à un pool global.
  • Gère la logique des rappels asynchrones, par exemple en ajoutant une requête en attente à un pool de requêtes en attente. Résout les requêtes en attente lorsque nous recevons les résultats ou renvoie une erreur lorsqu'une des requêtes en attente expire.
  • Sérialise et désérialise LargeParcelable (voir ParcelableUtils.h).
  • Gère l'abonnement (voir SubscriptionManager.h).
  • Vérifie les autorisations. (voir les fonctions checkReadPermission et checkWritePermission)
  • Appele régulièrement IVehicleHardware.checkHealth et envoie des signaux de battement de cœur (voir la fonction checkHealth).

IVehicleHardware est une interface générique utilisée pour représenter l'implémentation matérielle spécifique d'un VHAL. L'implémentation de référence pour IVehicleHardware est FakeVehicleHardware, qui utilise une carte en mémoire pour stocker la valeur de la propriété et ne communique pas avec un bus de véhicule réel. Il est destiné à s'exécuter sur un émulateur et n'a aucune dépendance spécifique au matériel. Les implémentations des fournisseurs ne doivent pas l'utiliser telle quelle et doivent ajouter une logique spécifique au bus du véhicule.

Dans Android 14, FakeVehicleHardware lit la configuration de propriété compatible au moment de l'exécution lors de l'initialisation à partir du dossier /vendor/etc/automotive/vhalconfig/ de l'appareil, qui contient un fichier de configuration de style JSON. Pour connaître le format et le contenu du fichier de configuration, consultez le fichier README de référence VHAL.

FakeVehicleHardware prend également en charge le forçage de fichier de configuration pour les tests. Si la propriété système persist.vendor.vhal_init_value_override est définie, elle utilise le fichier de configuration du dossier /vendor/etc/automotive/vhaloverride/ de l'appareil pour remplacer la configuration existante. Une implémentation par le fournisseur peut utiliser une approche similaire afin que la configuration des propriétés compatibles avec VHAL ne soit pas codée en dur et puisse être décidée de manière dynamique au démarrage. La configuration des propriétés du véhicule doit être statique une fois l'appareil démarré.