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.hdeVehiclePropValue.aidl.Por isso, você precisa incluir todos os arquivos de cabeçalho dos tipos necessários. Um arquivo auxiliar,
VehicleHalTypes.hna bibliotecaVehicleHalUtils, contém a maioria dos tipos comuns. - Todos os tipos definidos em
types.halsão os mesmos em AIDL, exceto:SubscribeFlagsé removido porque não é usado, já queonPropertySetfoi removidoUserFlagsagora é definido emUserInfo.aidle 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_XXXbit-or juntos.RawValueemVehiclePropValuefoi renomeado comoRawPropValuebytesemRawValuefoi renomeado comobyteValues.
| Em vez de ... | Uso |
|---|---|
hidl_vec |
std::vector |
hidl_string |
std::string |
android::sp |
std::shared_ptr |
android::wp |
std::weak_ptr |