Guide de migration HIDL VHAL

Pour migrer une implémentation VHAL HIDL existante vers un VHAL AIDL, utilisez la structure d'implémentation de référence AIDL pour mettre en œuvre l'interface IVehicleHardware.

Si l'implémentation HIDL existante suit également l'implémentation de référence HIDL, le fournisseur a implémenté la classe VehicleHal. IVehicleHardware est très semblable à VehicleHal.

HIDL VHAL AIDL VHAL
getAllPropertyConfigs() Prix identique à celui de l'hôtel VehicleHal.listProperties()
getValues(callback, requests) Peut appeler VehicleHal.get() pour chaque requête et peut appeler des rappels.
dump() Prix identique à celui de l'hôtel VehicleHal.dump()
checkHealth() Peut renvoyer VehicleHal.get()
registerPropertyChangeCallback() Semblable au paramètre VehicleHal.mOnHalEvent

Différences de types dans AIDL

Lorsque vous passez de la VHAL HIDL à la VHAL AIDL, tenez compte de ces différences.

  1. HIDL génère un fichier d'en-tête (types.h) pour tous les types générés à partir de types.hal. AIDL génère un fichier d'en-tête pour chaque type. Par exemple, VehiclePropValue.h à partir de VehiclePropValue.aidl.

    Par conséquent, vous devez inclure tous les fichiers d'en-tête pour les types dont vous avez besoin. Un fichier d'assistance, VehicleHalTypes.h dans la bibliothèque VehicleHalUtils, contient la plupart des types courants.

  2. Au lieu de ... Utiliser
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. Tous les types définis dans types.hal sont les mêmes dans AIDL sauf :
    • SubscribeFlags est supprimé, car il n'est pas utilisé, car onPropertySet est supprimé.
    • UserFlags est désormais défini dans UserInfo.aidl et doit être défini en tant qu'indicateur plutôt qu'en tant qu'énumération. Un champ d'indicateur utilisateur est un entier qui comporte plusieurs UserInfo.USER_FLAG_XXX bit-or ensemble.
    • RawValue dans VehiclePropValue est renommé RawPropValue.
    • bytes dans RawValue est renommé byteValues.