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.
- O HIDL gera um arquivo de cabeçalho (
types.h
) para todos os tipos gerados detypes.hal
. A AIDL gera um arquivo de cabeçalho para cada tipo. Por exemplo,VehiclePropValue.h
deVehiclePropValue.aidl
.Por isso, você precisa incluir todos os arquivos de cabeçalho dos tipos necessários. Um arquivo auxiliar,
VehicleHalTypes.h
na bibliotecaVehicleHalUtils
, contém a maioria dos tipos comuns. - Todos os tipos definidos em
types.hal
são os mesmos em AIDL, exceto:SubscribeFlags
é removido porque não é usado, já queonPropertySet
foi removidoUserFlags
agora é definido emUserInfo.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áriosUserInfo.USER_FLAG_XXX
bit-or juntos.RawValue
emVehiclePropValue
foi renomeado comoRawPropValue
bytes
emRawValue
foi renomeado comobyteValues
.
Em vez de ... | Uso |
---|---|
hidl_vec |
std::vector |
hidl_string |
std::string |
android::sp |
std::shared_ptr |
android::wp |
std::weak_ptr |