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

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

Nếu chế độ triển khai HIDL hiện có cũng tuân theo 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 từng yêu cầu và có thể gọi các lệnh gọi lại.
dump() Bằng giá với VehicleHal.dump()
checkHealth() Có thể trả lại VehicleHal.get()
registerPropertyChangeCallback() Tương tự như việc đặt VehicleHal.mOnHalEvent

Sự khác biệt về kiểu 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 thêm tất cả các tệp tiêu đề cho những 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 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
    • bytes trong RawValue được đổi tên thành byteValues