Przewodnik po migracji HIDL VHAL

Aby przeprowadzić migrację istniejącej implementacji HIDL VHAL do AIDL VHAL, użyj referencyjnej struktury implementacji AIDL w celu zaimplementowania interfejsu IVehicleHardware .

Jeśli następuje również istniejąca implementacja HIDL Implementacja referencyjna HIDL , sprzedawca zaimplementował klasę VehicleHal . IVehicleHardware jest bardzo podobny do VehicleHal .

HIDL VHAL AIDL VHAL
getAllPropertyConfigs() To samo co VehicleHal.listProperties()
getValues(callback, requests) Może wywoływać VehicleHal.get() dla każdego żądania i wywoływać wywołania zwrotne.
dump() To samo co VehicleHal.dump()
checkHealth() Może zwrócić VehicleHal.get()
registerPropertyChangeCallback() Podobne do ustawiania VehicleHal.mOnHalEvent

Różnice typów w AIDL

Podczas migracji z HIDL VHAL do AIDL VHAL należy wziąć 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 dołączyć wszystkie pliki nagłówkowe dla potrzebnych typów. Plik pomocniczy VehicleHalTypes.h w bibliotece VehicleHalUtils zawiera większość popularnych typów.

  2. Zamiast ... Używać
    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ł usunięty, ponieważ nie jest używany, ponieważ usunięto onPropertySet
    • UserFlags jest teraz zdefiniowana w UserInfo.aidl i powinna być zdefiniowana jako flaga, a nie wyliczenie. Pole flagi użytkownika to liczba całkowita zawierająca wiele bitów UserInfo.USER_FLAG_XXX lub łącznie.
    • RawValue w VehiclePropValue została zmieniona na RawPropValue
    • bytes w RawValue zostaje zmieniona na byteValues