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).