Sie können vorhandene HAL-Module in HIDL-HAL-Module umwandeln, indem Sie den Header in hardware/libhardware/include/hardware
konvertieren.
c2hal verwenden
Das c2hal
-Tool übernimmt den Großteil der Konvertierungsarbeit und reduziert so die Anzahl der erforderlichen manuellen Änderungen. So generieren Sie beispielsweise eine HIDL-Datei .hal
für den 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
Mit diesen Befehlen werden Dateien in hardware/interfaces/nfc/1.0/
hinzugefügt. Wenn Sie hardware/interfaces/update-makefiles.sh
im Verzeichnis $ANDROID_BUILD_TOP
ausführen, wird dem HAL auch das erforderliche Make-Datei hinzugefügt. Hier können Sie manuelle Änderungen vornehmen, um das HAL vollständig zu konvertieren.
c2hal-Aktivitäten
Wenn Sie c2hal
ausführen, wird alles in der Headerdatei in .hal
-Dateien übertragen.
c2hal
identifiziert Strukturen, die Funktionszeiger in der bereitgestellten Headerdatei enthalten, und konvertiert jede Struktur in eine separate Schnittstellendatei.
alloc_device_t
wird beispielsweise in das HAL-Modul IAllocDevice
(in der Datei IAllocDevice.hal
) konvertiert.
Alle anderen Datentypen werden in eine types.hal
-Datei kopiert.
Pound-Defines werden in Enums verschoben und Elemente, die nicht Teil von HIDL oder nicht konvertierbar sind (z. B. statische Funktionsdeklarationen), werden in Kommentare kopiert, die mit dem Text „NOTE
“ gekennzeichnet sind.
Manuelle Aktivitäten
Das c2hal
-Tool weiß nicht, was es tun soll, wenn es auf bestimmte Konstrukte trifft. HIDL kennt beispielsweise keine Rohzeiger. Wenn c2hal
in Headerdateien auf einen Zeiger trifft, weiß es daher nicht, ob der Zeiger als Array oder als Verweis auf ein anderes Objekt interpretiert werden soll. Void-Pointer sind ebenfalls ähnlich undurchsichtig.
Felder wie int reserved[7]
müssen bei der Umstellung auf HIDL manuell entfernt werden. Elemente wie der Name des Rückgabewerts sollten in etwas aussagekräftigeres geändert werden. Beispielsweise sollte der Rückgabeparameter von Methoden wie write
in NFC vom automatisch generierten int32_t write_ret
in Status status
geändert werden (wobei Status
ein neues Enum mit möglichen NFC-Status ist).
HAL implementieren
Nachdem Sie .hal
-Dateien zur Darstellung Ihres HAL erstellt haben, müssen Sie die Makefiles (Make oder Soong) generieren, mit denen die Sprachunterstützung in C++ und Java erstellt wird (es sei denn, der HAL verwendet eine in Java nicht unterstützte Funktion). Das ./hardware/interfaces/update-makefiles.sh
-Skript kann automatisch Makefiles für HALs generieren, die sich im Verzeichnis hardware/interfaces
befinden. Für HALs an anderen Speicherorten müssen Sie das Skript nur aktualisieren.
Wenn die Makefiles auf dem neuesten Stand sind, können Sie Headerdateien generieren und Methoden implementieren. Weitere Informationen zum Implementieren der generierten Schnittstelle finden Sie unter HIDL C++ (für C++-Implementierungen) oder HIDL Java (für Java-Implementierungen).