如要将现有的 HIDL VHAL 实现迁移到 AIDL VHAL,可使用 AIDL 参考实现结构来实现 IVehicleHardware 接口。
如果现有的 HIDL 实现也遵循 HIDL 参考实现,则说明供应商已实现 VehicleHal 类。IVehicleHardware 与 VehicleHal 非常相似。
| HIDL VHAL | AIDL VHAL |
|---|---|
getAllPropertyConfigs() |
与 VehicleHal.listProperties() 相同 |
getValues(callback, requests) |
可以为每个请求调用 VehicleHal.get(),也可以调用回调。
|
dump() |
与 VehicleHal.dump() 相同 |
checkHealth() |
可以返回 VehicleHal.get() |
registerPropertyChangeCallback() |
与设置 VehicleHal.mOnHalEvent 类似 |
AIDL 中的类型差异
从 HIDL VHAL 迁移到 AIDL VHAL 时,请考虑以下差异。
- HIDL 会为所有从
types.hal生成的类型生成一个头文件 (types.h)。AIDL 会为每种类型生成一个头文件。例如:从VehiclePropValue.aidl生成VehiclePropValue.h。因此,您必须添加所需类型的所有头文件。
VehicleHalUtils库中的VehicleHalTypes.h辅助文件包含了大部分常用类型。 types.hal中定义的所有类型在 AIDL 中都是一样的,但以下几项除外:SubscribeFlags已被移除。之所以不再使用它,是因为onPropertySet也被移除了UserFlags现在定义在UserInfo.aidl中,应定义为标志而不是枚举。用户标志字段是一个整数,包含多个UserInfo.USER_FLAG_XXX按位或运算的结果。VehiclePropValue中的RawValue已重命名为RawPropValueRawValue中的bytes已重命名为byteValues
| 代替 | 使用 |
|---|---|
hidl_vec |
std::vector |
hidl_string |
std::string |
android::sp |
std::shared_ptr |
android::wp |
std::weak_ptr |