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

Чтобы перенести существующую реализацию 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 учитывайте следующие различия.

  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