Guida alla migrazione di HIDL VHAL

Per eseguire la migrazione di un'implementazione VHAL HIDL esistente a una VHAL AIDL, utilizza la struttura dell'implementazione di riferimento AIDL per implementare l'interfaccia IVehicleHardware.

Se l'implementazione HIDL esistente segue anche l'implementazione di riferimento HIDL, il fornitore ha implementato la classe VehicleHal. IVehicleHardware è molto simile a VehicleHal.

HIDL VHAL AIDL VHAL
getAllPropertyConfigs() Uguale a VehicleHal.listProperties()
getValues(callback, requests) Può chiamare VehicleHal.get() per ogni richiesta e può chiamare i callback.
dump() Uguale a VehicleHal.dump()
checkHealth() Può restituire VehicleHal.get()
registerPropertyChangeCallback() Simile all'impostazione VehicleHal.mOnHalEvent

Differenze di tipo in AIDL

Quando esegui la migrazione da HIDL VHAL ad AIDL VHAL, considera queste differenze.

  1. HIDL genera un file di intestazione (types.h) per tutti i tipi generati da types.hal. AIDL genera un file di intestazione per ogni tipo. Ad esempio, VehiclePropValue.h da VehiclePropValue.aidl.

    Di conseguenza, devi includere tutti i file di intestazione per i tipi che ti servono. Un file di supporto, VehicleHalTypes.h nella libreria VehicleHalUtils contiene la maggior parte dei tipi comuni.

  2. Invece di… Usa
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. Tutti i tipi definiti in types.hal sono gli stessi in AIDL tranne per:
    • SubscribeFlags viene rimosso perché non viene utilizzato in quanto onPropertySet è stato rimosso
    • UserFlags è ora definito in UserInfo.aidl e deve essere definito come flag anziché come enumerazione. Un campo flag utente è un numero intero con più UserInfo.USER_FLAG_XXX bit-or insieme.
    • RawValue in VehiclePropValue è stato rinominato in RawPropValue
    • bytes in RawValue è stato rinominato in byteValues