Guía de migración HIDL VHAL

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

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

HIDL VHAL AIDL VHAL
getAllPropertyConfigs() Igual que VehicleHal.listProperties()
getValues(callback, requests) Puede llamar 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 configurar VehicleHal.mOnHalEvent

Diferencias de tipos en AIDL

Al migrar de HIDL VHAL a AIDL VHAL, considere estas diferencias.

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

    Como resultado, debe incluir todos los archivos de encabezado para los tipos que necesita. Un archivo auxiliar, 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 iguales en AIDL excepto por:
    • SubscribeFlags se elimina porque no se usa porque se elimina onPropertySet
    • UserFlags ahora está definido en UserInfo.aidl y debe definirse como una bandera en lugar de una enumeración. Un campo de indicador de usuario es un número entero que tiene varios bits UserInfo.USER_FLAG_XXX o juntos.
    • RawValue en VehiclePropValue pasa a llamarse RawPropValue
    • bytes en RawValue pasan a llamarse byteValues