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 de 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 entre os tipos na AIDL
Ao migrar da VHAL da HIDL para a VHAL da AIDL, considere essas diferenças.
- O HIDL gera um arquivo de cabeçalho (
types.h
) para todos os tipos gerados a partir detypes.hal
. O AIDL gera um arquivo de cabeçalho para cada tipo. Por exemplo,VehiclePropValue.h
deVehiclePropValue.aidl
.Como resultado, é necessário 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 iguais no AIDL exceto:SubscribeFlags
foi removido porque não é usado, já queonPropertySet
foi removidoUserFlags
agora é definido emUserInfo.aidl
e precisa ser definido como uma flag em vez de um tipo enumerado. Um campo de flag do usuário é um número inteiro que tem váriosUserInfo.USER_FLAG_XXX
bits-ou 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 |