Guia de migração do HIDL VHAL

Para migrar uma implementação da VHAL HIDL para uma VHAL AIDL, use a estrutura da implementação de referência AIDL para implementar a interface IVehicleHardware.

Se a implementação HIDL atual também seguir a implementação de referência do HIDL, o fornecedor terá implementado a classe VehicleHal. IVehicleHardware é muito semelhante a VehicleHal.

HIDL VHAL VHAL AIDL
getAllPropertyConfigs() Igual ao hotel VehicleHal.listProperties()
getValues(callback, requests) Pode chamar VehicleHal.get() para cada solicitação e retornos de chamada.
dump() Igual ao hotel VehicleHal.dump()
checkHealth() Pode retornar VehicleHal.get()
registerPropertyChangeCallback() Semelhante à configuração VehicleHal.mOnHalEvent

Diferenças de tipos na AIDL

Ao migrar do HIDL VHAL para o AIDL VHAL, considere estas diferenças.

  1. O HIDL gera um arquivo principal (types.h) para todos os tipos gerados de types.hal. A AIDL gera um arquivo principal para cada tipo. Por exemplo, VehiclePropValue.h de VehiclePropValue.aidl.

    Por isso, você precisa incluir todos os arquivos de cabeçalho dos tipos necessários. Um arquivo auxiliar, VehicleHalTypes.h na biblioteca VehicleHalUtils, contém a maioria dos tipos comuns.

  2. Em vez de ... Usar
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. Todos os tipos definidos em types.hal são os mesmos em AIDL, exceto:
    • SubscribeFlags foi removido porque não é usado, já que onPropertySet foi removido
    • UserFlags agora é definido em UserInfo.aidl e precisa ser definido como uma flag em vez de uma enumeração. Um campo de flag de usuário é um número inteiro que tem vários UserInfo.USER_FLAG_XXX bit-or juntos.
    • RawValue em VehiclePropValue foi renomeado como RawPropValue
    • bytes em RawValue foi renomeado como byteValues.