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 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 da VHAL HIDL para a VHAL AIDL, considere estas diferenças.

  1. O HIDL gera um arquivo de cabeçalho (types.h) para todos os tipos gerados de types.hal. A AIDL gera um arquivo de cabeçalho 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 ... Uso
    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 é 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.