HAL-Module konvertieren

Sie können vorhandene HAL-Module zu HIDL-HAL-Modulen aktualisieren, indem Sie den Header in hardware/libhardware/include/hardware konvertieren.

c2hal verwenden

Das Tool c2hal übernimmt den Großteil der Umstellungsarbeit und reduziert die Anzahl der erforderlichen manuellen Änderungen. So generieren Sie beispielsweise eine HIDL-.hal-Datei für die 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 aus dem Verzeichnis $ANDROID_BUILD_TOP ausführen, wird dem HAL auch das erforderliche Makefile hinzugefügt. Hier können Sie manuelle Änderungen vornehmen, um die HAL vollständig zu konvertieren.

c2hal activities

Wenn Sie c2hal ausführen, wird der gesamte Inhalt der Headerdatei in .hal-Dateien übertragen.

c2hal identifiziert Strukturen, die Funktionszeigeter in der bereitgestellten Headerdatei enthalten, und konvertiert jede Struktur in eine separate Schnittstellendatei. Beispiel: alloc_device_t wird in das HAL-Modul IAllocDevice (in der Datei IAllocDevice.hal) konvertiert.

Alle anderen Datentypen werden in eine types.hal-Datei kopiert. Pound-Definitionen werden in Enumerationen verschoben und Elemente, die nicht zu HIDL gehören oder nicht konvertiert werden können (z. B. Deklarationen von statischen Funktionen), werden in Kommentare kopiert, die mit dem Text „NOTE“ gekennzeichnet sind.

Manuelle Aktivitäten

Das c2hal-Tool weiß nicht, was es tun soll, wenn bestimmte Konstrukte erkannt werden. HIDL kennt beispielsweise keine Roh-Pointer. Wenn c2hal also einen Pointer in Headerdateien findet, weiß er nicht, ob der Pointer 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 während der Umstellung auf HIDL manuell entfernt werden. Elemente wie der Name des Rückgabewerts sollten in etwas Sinnvolleres geändert werden. Beispiel: Konvertieren Sie den Rückgabeparameter von Methoden wie write in NFC vom automatisch generierten int32_t write_ret in Status status. Dabei ist Status ein neues Enum mit möglichen NFC-Status.

HAL implementieren

Nachdem Sie .hal-Dateien für Ihre HAL erstellt haben, müssen Sie die Makefiles (Make oder Soong) generieren, die die Sprachunterstützung in C++ und Java erstellen, es sei denn, die HAL verwendet eine in Java nicht unterstützte Funktion. Das ./hardware/interfaces/update-makefiles.sh-Script kann automatisch Makefiles für HALs im Verzeichnis hardware/interfaces generieren. Für HALs an anderen Speicherorten aktualisieren Sie einfach das Script.

Wenn die Makefiles auf dem neuesten Stand sind, können Sie Headerdateien generieren und Methoden implementieren. Weitere Informationen zur Implementierung der generierten Schnittstelle finden Sie unter HIDL C++ (für C++-Implementierungen) oder HIDL Java (für Java-Implementierungen).