Để 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.
- 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ệnVehicleHalUtils
chứa hầu hết các loại phổ biến. - 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 doonPropertySet
bị xoáUserFlags
hiện được xác định trongUserInfo.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ềuUserInfo.USER_FLAG_XXX
bit-or với nhau.- Đổi tên
RawValue
trongVehiclePropValue
thànhRawPropValue
bytes
trongRawValue
được đổi tên thànhbyteValues
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 |