Guía de migración de VHAL de HIDL

Para migrar una implementación de VHAL HIDL existente a un VHAL AIDL, usa la estructura de implementación de referencia de AIDL para implementar la interfaz IVehicleHardware.

Si la implementación de HIDL existente también sigue la implementación de referencia de HIDL, el proveedor implementó la clase VehicleHal. IVehicleHardware es muy similar a VehicleHal.

HIDL VHAL VHAL de AIDL
getAllPropertyConfigs() Igual que VehicleHal.listProperties()
getValues(callback, requests) Puede llamar a VehicleHal.get() para cada solicitud y puede llamar a devoluciones de llamada.
dump() Igual que VehicleHal.dump()
checkHealth() Puede devolver VehicleHal.get()
registerPropertyChangeCallback() Similar a la configuración de VehicleHal.mOnHalEvent

Diferencias de tipos en AIDL

Cuando migres de la VHAL de HIDL a la del AIDL, ten en cuenta estas diferencias.

  1. HIDL genera un archivo de encabezado (types.h) para todos los tipos generados a partir de types.hal. AIDL genera un archivo de encabezado para cada tipo. Por ejemplo, VehiclePropValue.h de VehiclePropValue.aidl.

    Como resultado, debes incluir todos los archivos de encabezado para los tipos que necesitas. Un archivo de ayuda, VehicleHalTypes.h en la biblioteca VehicleHalUtils, contiene la mayoría de los tipos comunes.

  2. En lugar de ... Usar
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. Todos los tipos definidos en types.hal son los mismos en AIDL excepto los siguientes:
    • Se quitó SubscribeFlags porque no se usa, ya que se quitó onPropertySet.
    • UserFlags ahora se define en UserInfo.aidl y debe definirse como una marca en lugar de una enumeración. Un campo de marca de usuario es un número entero que tiene varios UserInfo.USER_FLAG_XXX juntos.
    • Se cambió el nombre de RawValue en VehiclePropValue por RawPropValue.
    • Se cambió el nombre de bytes en RawValue por byteValues.