HIDL VHAL 迁移指南

要将现有的 HIDL VHAL 实现迁移到 AIDL 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.aidlVehiclePropValue.h

    因此,您必须包含所需类型的所有头文件。帮助程序文件 VehicleHalTypes.h(位于 VehicleHalUtils 库中)包含大多数常用类型。

  2. 而不是... 使用
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. 在 AIDL 中,types.hal 中定义的所有类型都相同,**但以下类型除外**:
    • SubscribeFlags 已移除,因为它未使用,因为 onPropertySet 已移除。
    • UserFlags 现在在 UserInfo.aidl 中定义,应定义为标志而不是枚举。用户标志字段是一个整数,它将多个 UserInfo.USER_FLAG_XXX 位或运算在一起。
    • VehiclePropValue 中的 RawValue 重命名为 RawPropValue
    • RawValue 中的 bytes 重命名为 byteValues