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

    因此,您必須根據需要的類型,納入所有標頭檔案。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 已遭移除,因此 SubscribeFlags 無法使用
    • UserFlags 現在已在 UserInfo.aidl 中定義,且應定義為旗標,而非枚舉。使用者標記欄位是包含多個或一起 UserInfo.USER_FLAG_XXX 位元的整數。
    • VehiclePropValue 中的 RawValue 已重新命名為 RawPropValue
    • RawValue 中的 bytes 已重新命名為 byteValues