HIDL VHAL 迁移指南

如要将现有的 HIDL VHAL 实现迁移到 HIDL VHAL,可使用 AIDL 参考实现结构来实现 IVehicleHardware 接口。

如果现有的 HIDL 实现也遵循 HIDL 参考实现,则说明供应商已实现 VehicleHal 类。IVehicleHardwareVehicleHal 非常相似。

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