Чтобы перенести существующую реализацию HIDL VHAL в AIDL VHAL, используйте эталонную структуру реализации AIDL для реализации интерфейса IVehicleHardware .
Если существующая реализация HIDL также соответствует эталонной реализации HIDL , поставщик реализовал класс VehicleHal . IVehicleHardware очень похож на VehicleHal .
| ХИДЛ ВХАЛ | AIDL VHAL |
|---|---|
getAllPropertyConfigs() | То же, что и VehicleHal.listProperties() |
getValues(callback, requests) | Может вызывать VehicleHal.get() для каждого запроса и может вызывать обратные вызовы. |
dump() | То же, что и VehicleHal.dump() |
checkHealth() | Может вернуть VehicleHal.get() |
registerPropertyChangeCallback() | Аналогично настройке VehicleHal.mOnHalEvent |
Различия типов в AIDL
При переходе с HIDL VHAL на AIDL VHAL учитывайте следующие различия.
- HIDL генерирует один заголовочный файл (
types.h) для всех типов, сгенерированных изtypes.hal. AIDL генерирует один заголовочный файл для каждого типа. Например,VehiclePropValue.hизVehiclePropValue.aidl.В результате вам необходимо включить все заголовочные файлы для необходимых типов. Вспомогательный файл
VehicleHalTypes.hв библиотекеVehicleHalUtilsсодержит большинство распространённых типов. - Все типы, определенные в
types.hal, одинаковы в AIDL, за исключением :-
SubscribeFlagsудален, так как он не используется, так какonPropertySetудален. -
UserFlagsтеперь определено вUserInfo.aidlи должно быть определено как флаг, а не как перечисление. Поле пользовательского флага — это целое число, состоящее из нескольких битовUserInfo.USER_FLAG_XXX, объединенных в одно. -
RawValueвVehiclePropValueпереименован вRawPropValue -
bytesвRawValueпереименованы вbyteValues
-
| Вместо ... | Использовать |
|---|---|
hidl_vec | std::vector |
hidl_string | std::string |
android::sp | std::shared_ptr |
android::wp | std::weak_ptr |