Руководство по миграции HIDL VHAL

Для миграции существующей реализации HIDL VHAL на AIDL VHAL используйте эталонную структуру реализации AIDL для реализации интерфейса IVehicleHardware .

Если существующая реализация HIDL также соответствует эталонной реализации HIDL , значит, поставщик реализовал класс VehicleHal . IVehicleHardware очень похож на VehicleHal .

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.h ) для всех типов, созданных из types.hal . AIDL генерирует один заголовочный файл для каждого типа. Например, VehiclePropValue.h из VehiclePropValue.aidl .

    В результате вам необходимо включить все заголовочные файлы для необходимых вам типов. Вспомогательный файл VehicleHalTypes.h в библиотеке VehicleHalUtils содержит большинство распространенных типов.

  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
    • Теперь UserFlags определен в файле UserInfo.aidl и должен быть определен как флаг, а не как перечисление. Поле пользовательского флага представляет собой целое число, которое принимает несколько значений UserInfo.USER_FLAG_XXX в результате операции битового ИЛИ.
    • RawValue в VehiclePropValue переименовано в RawPropValue
    • В RawValue bytes переименовывается в byteValues