Mengonversi modul HAL

Anda dapat mengupdate modul HAL yang sudah ada menjadi modul HAL HIDL dengan mengonversi header di hardware/libhardware/include/hardware.

Menggunakan c2hal

Alat c2hal menangani sebagian besar pekerjaan konversi, sehingga mengurangi jumlah perubahan manual yang diperlukan. Misalnya, untuk membuat file .hal HIDL untuk HAL NFC:

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

Perintah ini menambahkan file di hardware/interfaces/nfc/1.0/. Menjalankan hardware/interfaces/update-makefiles.sh dari direktori $ANDROID_BUILD_TOP juga akan menambahkan makefile yang diperlukan ke HAL. Dari sini, Anda dapat melakukan perubahan manual untuk mengonversi HAL sepenuhnya.

c2hal activities

Saat Anda menjalankan c2hal, semua yang ada di file header akan ditransfer ke file .hal.

c2hal mengidentifikasi struct yang berisi pointer fungsi dalam file header yang diberikan dan mengonversi setiap struct menjadi file antarmuka terpisah. Misalnya, alloc_device_t dikonversi ke modul HAL IAllocDevice (dalam file IAllocDevice.hal).

Semua jenis data lainnya disalin ke dalam file types.hal. Pound-define dipindahkan ke enum, dan item yang bukan bagian dari HIDL atau tidak dapat dikonversi (seperti deklarasi fungsi statis) disalin ke dalam komentar yang ditandai dengan teks "NOTE".

Aktivitas manual

Alat c2hal tidak tahu apa yang harus dilakukan saat menemukan konstruksi tertentu. Misalnya, HIDL tidak memiliki konsep pointer mentah; karena itu, saat c2hal menemukan pointer dalam file header, c2hal tidak tahu apakah pointer tersebut harus ditafsirkan sebagai array atau sebagai referensi ke objek lain. Pointer void juga sama-sama buram.

Kolom seperti int reserved[7] harus dihapus secara manual selama transisi ke HIDL. Item seperti nama nilai yang ditampilkan harus diperbarui menjadi sesuatu yang lebih bermakna; misalnya, mengonversi parameter yang ditampilkan dari metode seperti write di NFC dari int32_t write_ret yang dibuat otomatis menjadi Status status (dengan Status adalah enum baru yang berisi kemungkinan status NFC).

Menerapkan HAL

Setelah membuat file .hal untuk merepresentasikan HAL, Anda harus membuat file make (Make atau Soong) yang membuat dukungan bahasa di C++ dan Java (kecuali jika HAL menggunakan fitur yang tidak didukung di Java). Skrip ./hardware/interfaces/update-makefiles.sh dapat otomatis membuat makefile untuk HAL yang berada di direktori hardware/interfaces (untuk HAL di lokasi lain, cukup perbarui skrip).

Setelah makefile diupdate, Anda siap membuat file header dan menerapkan metode. Untuk mengetahui detail tentang penerapan antarmuka yang dihasilkan, lihat HIDL C++ (untuk penerapan C++) atau HIDL Java (untuk penerapan Java).