Guida alla migrazione di HIDL VHAL

Per eseguire la migrazione di un'implementazione VHAL HIDL esistente a un'implementazione 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 nei tipi in AIDL

Quando esegui la migrazione da HIDL VHAL ad AIDL VHAL, tieni conto di 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 di cui hai bisogno. 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:
    • SubscribeFlags viene rimosso perché non viene utilizzato poiché onPropertySet viene rimosso
    • UserFlags ora è definito in UserInfo.aidl e deve essere definito come flag anziché come enum. Un campo di indicatori utente è un numero intero con più UserInfo.USER_FLAG_XXX OR di bit insieme.
    • RawValue in VehiclePropValue viene rinominato in RawPropValue
    • bytes in RawValue viene rinominato byteValues