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.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 已遭移除,因此 SubscribeFlags 無法使用
    • UserFlags 現在已在 UserInfo.aidl 中定義,且應定義為標記,而非枚舉。使用者標記欄位是包含多個 UserInfo.USER_FLAG_XXX 位元或運算的整數。
    • VehiclePropValue 中的 RawValue 已重新命名為 RawPropValue
    • RawValue 中的 bytes 已重新命名為 byteValues