Przewodnik po migracji HIDL VHAL

Aby przenieść istniejące wdrożenie VHAL HIDL do 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. Parametr 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żdej prośby i może wywoływać funkcję wywołania zwrotnego.
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 przechodzenia 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 jeden plik nagłówka dla każdego typu. Na przykład: VehiclePropValue.h z witryny VehiclePropValue.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 funkcji types.hal są takie same w AIDL z wyjątkiem tych typów:
    • Element SubscribeFlags został usunięty, ponieważ nie jest używany, ponieważ element onPropertySet został usunięty
    • Element UserFlags jest teraz zdefiniowany w UserInfo.aidl i powinien być zdefiniowany jako flaga, a nie wyliczenie. 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
    • Nazwa bytes w: RawValue została zmieniona na byteValues