Guia de migração de VHAL de HIDL

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

Se a implementação atual do HIDL também seguir a implementação de referência de HIDL, o fornecedor implementou 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 pode chamar callbacks.
dump() Igual ao hotel VehicleHal.dump()
checkHealth() Pode devolver VehicleHal.get()
registerPropertyChangeCallback() Semelhante à configuração VehicleHal.mOnHalEvent

Diferenças de tipos na AIDL

Ao migrar da VHAL da HIDL para a VHAL da AIDL, considere essas diferenças.

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

    Como resultado, é necessário incluir todos os arquivos de cabeçalho referentes aos 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 iguais na 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 um tipo enumerado. Um campo de indicador do usuário é um número inteiro que tem vários UserInfo.USER_FLAG_XXX bits-ou juntos.
    • RawValue em VehiclePropValue foi renomeado como RawPropValue
    • bytes em RawValue foi renomeado como byteValues.