Przewodnik po migracji z HIDL do VHAL

Aby przeprowadzić migrację istniejącej implementacji VHAL HIDL do AIDL VHAL, użyj struktury implementacji referencyjnej AIDL do zaimplementowania interfejsu 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() Tak samo jak VehicleHal.listProperties()
getValues(callback, requests) Może wywoływać VehicleHal.get() w przypadku każdego żądania i wywoływać wywołania zwrotne.
dump() Tak samo jak VehicleHal.dump()
checkHealth() Może zwracać VehicleHal.get()
registerPropertyChangeCallback() Podobne do ustawienia VehicleHal.mOnHalEvent

Różnice między typami w AIDL

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

  1. HIDL generuje jeden plik nagłówkowy (types.h) dla wszystkich typów wygenerowanych z types.hal. AIDL generuje jeden plik nagłówkowy dla każdego typu. Na przykład, VehiclePropValue.h z VehiclePropValue.aidl.

    W rezultacie musisz uwzględnić wszystkie pliki nagłówkowe dla potrzebnych typów. Plik pomocniczy, VehicleHalTypes.h w bibliotece VehicleHalUtils zawiera większość typowych typó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 :
    • SubscribeFlags jest usuwany, ponieważ nie jest używany, ponieważ onPropertySet jest usuwany
    • UserFlags jest teraz zdefiniowany w UserInfo.aidl i powinien być zdefiniowany jako flaga, a nie jako wyliczenie. Pole flagi użytkownika to liczba całkowita, która ma wiele UserInfo.USER_FLAG_XXX bitów.
    • RawValue w VehiclePropValue jest zmieniana na RawPropValue.
    • bytes w RawValue jest zmieniana na byteValues.