Konwertowanie modułów HAL

Istniejące moduły HAL możesz zaktualizować do modułów HIDL HAL, konwertując nagłówek w komórce hardware/libhardware/include/hardware.

Użyj c2hal

c2hal narzędzie to wykonuje większość działań związanych z konwersją, co zmniejsza liczbę wymaganych ręcznych zmian zmian. Aby na przykład wygenerować plik HIDL .hal dla modułu NFC HAL:

make c2hal
c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h

Te polecenia dodają pliki do folderu hardware/interfaces/nfc/1.0/. W toku hardware/interfaces/update-makefiles.sh z $ANDROID_BUILD_TOP dodaje też wymagany plik „makefile” do listy HAL. Tutaj możesz: ręcznie wprowadzić zmiany, aby w pełni przekonwertować wartość HAL.

działania c2hal

Po uruchomieniu polecenia c2hal przesyłane są wszystkie dane z pliku nagłówka do .hal plików.

c2hal identyfikuje elementy struct, które zawierają wskaźniki funkcji w i konwertuje każdy element struct na osobny plik interfejsu. Na przykład pole alloc_device_t jest konwertowane na Moduł HAL IAllocDevice (w pliku IAllocDevice.hal).

Pozostałe typy danych są kopiowane do pliku types.hal. Definicje w funtach są przenoszone do wyliczenia, a pozycje, które nie są albo nie są częścią HIDL, konwertowalne (np. deklaracje funkcji statycznych) są kopiowane do komentarzy oznaczono tekstem „NOTE”.

Aktywności ręczne

Narzędzie c2hal nie wie, co zrobić, gdy natrafi na dostęp pewnych konstrukcji. Na przykład w przypadku HIDL nie ma koncepcji nieprzetworzonych wskaźników, z powodu tego, że gdy c2hal napotka wskaźnik w plikach nagłówka, nie czy wskaźnik powinien być interpretowany jako tablica czy odwołanie do inny obiekt. Wskaźniki niewidoczne również są tak samo nieprzezroczyste.

Pole takie jak int reserved[7] trzeba usunąć ręcznie w trakcie przejście na HIDL. Elementy takie jak nazwa zwracanej wartości powinny być: zmieniono na coś bardziej znaczącego; np. konwersja zwrotu parametru metod, takich jak write w NFC z automatycznie wygenerowanego Z: int32_t write_ret do: Status status (gdzie Status to nowa enuma zawierająca możliwe stany NFC).

Wdrażanie HAL

Po utworzeniu .hal plików reprezentujących HAL możesz muszą wygenerować pliki Makerfiles (Make or Soong), które tworzą obsługę języka C++ i Java (chyba że HAL korzysta z funkcji nieobsługiwanej w języku Java). ./hardware/interfaces/update-makefiles.sh skrypt może automatycznie Generuj pliki Makefiles dla HAL znajdujących się w hardware/interfaces katalogu (w przypadku HAL w innych lokalizacjach wystarczy zaktualizować skrypt).

Gdy pliki są aktualne, możesz wygenerować pliki nagłówka. i metod implementacji. Szczegółowe informacje o implementowaniu wygenerowanego interfejsu znajdziesz w sekcji HIDL C++ (dla C++) wdrożenia) lub HIDL Java (w implementacjach Java).