Guida alla migrazione a 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 del riferimento HIDL, il fornitore ha implementato la classe VehicleHal. IVehicleHardware è molto simile a VehicleHal.

HIDL VHAL VHAL AIDL
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 tra i 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 di 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 è stato rimosso perché non utilizzato perché onPropertySet è stato 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.
    • RawValue in VehiclePropValue viene rinominato RawPropValue
    • bytes in RawValue viene rinominato byteValues