Hướng dẫn di chuyển HIDL VHAL

Để di chuyển phương thức triển khai HIDL VHAL hiện có sang VHAL AIDL, hãy sử dụng cấu trúc triển khai tham chiếu AIDL để triển khai giao diện IVehicleHardware.

Nếu cách triển khai HIDL hiện tại cũng tuân theo cách triển khai tham chiếu HIDL, thì nhà cung cấp đã triển khai lớp VehicleHal. IVehicleHardware rất giống với VehicleHal.

HIDL VHAL AIDL VHAL
getAllPropertyConfigs() Bằng giá với VehicleHal.listProperties()
getValues(callback, requests) Có thể gọi VehicleHal.get() cho mỗi yêu cầu và có thể gọi lệnh gọi lại.
dump() Bằng giá với VehicleHal.dump()
checkHealth() Có thể trả về VehicleHal.get()
registerPropertyChangeCallback() Tương tự như việc thiết lập VehicleHal.mOnHalEvent

Sự khác biệt về loại trong AIDL

Khi di chuyển từ HIDL VHAL sang AIDL VHAL, hãy cân nhắc những điểm khác biệt sau.

  1. HIDL tạo một tệp tiêu đề (types.h) cho tất cả các loại được tạo từ types.hal. AIDL tạo một tệp tiêu đề cho mỗi loại. Ví dụ: VehiclePropValue.h từ VehiclePropValue.aidl.

    Do đó, bạn phải bao gồm tất cả tệp tiêu đề cho các loại bạn cần. Tệp trợ giúp, VehicleHalTypes.h trong thư viện VehicleHalUtils chứa hầu hết các loại phổ biến.

  2. Thay vì ... Mục đích sử dụng
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. Tất cả các loại được xác định trong types.hal đều giống nhau trong AIDL ngoại trừ:
    • SubscribeFlags bị xoá vì không được sử dụng do onPropertySet bị xoá
    • UserFlags hiện được xác định trong UserInfo.aidl và phải được xác định dưới dạng cờ thay vì enum. Trường cờ người dùng là một số nguyên có nhiều UserInfo.USER_FLAG_XXX bit-or với nhau.
    • Đổi tên RawValue trong VehiclePropValue thành RawPropValue
    • Đổi tên bytes trong RawValue thành byteValues