Przewodnik po migracji z HIDL do VHAL

Aby przenieść istniejącą implementację HIDL VHAL do AIDL VHAL, użyj struktury implementacji referencyjnej AIDL, aby zaimplementować interfejs IVehicleHardware.

Jeśli obecna 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ć funkcje oddzwaniania.
dump() Taka sama cena jak w hotelu VehicleHal.dump()
checkHealth() Możesz zwrócić VehicleHal.get()
registerPropertyChangeCallback() Podobnie jak w przypadku 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łówkowy (types.h) dla wszystkich typów wygenerowanych z types.hal. AIDL generuje 1 plik nagłówkowy dla każdego typu. Na przykład VehiclePropValue.hVehiclePropValue.aidl.

    W związku z tym musisz uwzględnić wszystkie pliki nagłówkowe dla potrzebnych typów. Plik pomocniczyVehicleHalTypes.hVehicleHalUtils bibliotece 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 zostało usunięte, ponieważ nie jest używane, ponieważ usunięto onPropertySet
    • Wartość UserFlags jest teraz zdefiniowana w polu UserInfo.aidl i powinna być zdefiniowana jako flaga zamiast wyliczenia. Pole flagi użytkownika to liczba całkowita, która ma wiele UserInfo.USER_FLAG_XXX bitów połączonych operacją OR.
    • RawValue w VehiclePropValue zmieniono nazwę na RawPropValue
    • bytes w RawValue zmienił(a) nazwę na byteValues