HIDL VHAL 迁移指南

如要将现有的 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 时,请考虑以下差异。

  1. HIDL 会为所有从 types.hal 生成的类型生成一个头文件 (types.h)。AIDL 会为每种类型生成一个头文件。例如:从 VehiclePropValue.aidl 生成 VehiclePropValue.h。

    因此,您必须添加所需类型的所有头文件。VehicleHalUtils 库中的 VehicleHalTypes.h 辅助文件包含了大部分常用类型。

  2. 代替 使用
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. types.hal 中定义的所有类型在 AIDL 中都是一样的,但以下几项除外:
    • SubscribeFlags 已被移除。之所以不再使用它,是因为 onPropertySet 也被移除了
    • UserFlags 现在定义在 UserInfo.aidl 中,应定义为标志而不是枚举。用户标志字段是一个整数,包含多个 UserInfo.USER_FLAG_XXX 按位或运算的结果。
    • VehiclePropValue 中的 RawValue 已重命名为 RawPropValue
    • RawValue 中的 bytes 已重命名为 byteValues