Guia de migração HIDL VHAL

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

Se a implementação HIDL existente também seguir Implementação de referência HIDL , o fornecedor implementou a classe VehicleHal . IVehicleHardware é muito semelhante ao VehicleHal .

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

Diferenças de tipo no AIDL

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

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

    Como resultado, você deve 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 iguais em AIDL , exceto :
    • SubscribeFlags foi removido porque não é usado porque onPropertySet foi removido
    • UserFlags agora está definido em UserInfo.aidl e deve ser definido como um sinalizador em vez de um enum. Um campo de sinalizador de usuário é um número inteiro que possui vários bits UserInfo.USER_FLAG_XXX ou juntos.
    • RawValue em VehiclePropValue foi renomeado como RawPropValue
    • bytes em RawValue são renomeados como byteValues