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

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

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

ХИДЛ ВХАЛ АИДЛ ВХАЛ
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
    • bytes в RawValue переименованы в byteValues