Przewodnik po migracji z HIDL do VHAL

Aby przenieść istniejące wdrożenie VHAL HIDL do wdrożenia VHAL AIDL, użyj struktury wzorcowego wdrożenia AIDL, aby zaimplementować interfejs IVehicleHardware.

Jeśli istniejąca implementacja HIDL jest zgodna z implementacją referencyjną HIDL, dostawca zaimplementował klasę VehicleHal. IVehicleHardware jest bardzo podobny do VehicleHal.

HIDL VHAL AIDL VHAL
getAllPropertyConfigs() Taka sama cena jak w hotelu VehicleHal.listProperties()
getValues(callback, requests) Może wywoływać funkcję VehicleHal.get() w przypadku każdego żądania i może wywoływać funkcję obsługi wywołań zwrotnych.
dump() Taka sama cena jak w hotelu VehicleHal.dump()
checkHealth() Może zwrócić VehicleHal.get()
registerPropertyChangeCallback() Podobne do ustawienia VehicleHal.mOnHalEvent

Różnice w typach w AIDL

Podczas migracji z HIDL VHAL na AIDL VHAL weź pod uwagę te różnice.

  1. HIDL generuje jeden plik nagłówka (types.h) dla wszystkich typów wygenerowanych z types.hal. AIDL generuje po jednym pliku nagłówka dla każdego typu. Na przykład:VehiclePropValue.hVehiclePropValue.aidl.

    W rezultacie musisz uwzględnić wszystkie pliki nagłówka dla potrzebnych typów. Plik pomocniczy VehicleHalTypes.h w bibliotece VehicleHalUtils zawiera większość typów plików.

  2. Zamiast Użyj
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. Wszystkie typy zdefiniowane w types.hal są takie same w AIDL z wyjątkiem:
    • Element SubscribeFlags został usunięty, ponieważ nie jest używany, ponieważ element onPropertySet został usunięty
    • Wartość UserFlags jest teraz zdefiniowana w polu UserInfo.aidl i powinna być zdefiniowana jako flaga zamiast typu enum. Pole flagi użytkownika to liczba całkowita, która zawiera wiele bitowych operacji OR.UserInfo.USER_FLAG_XXX
    • Użytkownik RawValue w VehiclePropValue zmienił nazwę na RawPropValue
    • Użytkownik bytes w RawValue zmienił nazwę na byteValues