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.
- O HIDL gera um arquivo principal (
types.h
) para todos os tipos gerados 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 referentes aos 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 na 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 indicador 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 |