Mengonversi modul HAL

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

Gunakan c2hal

Tujuan c2hal menangani sebagian besar pekerjaan konversi, sehingga mengurangi jumlah perubahan. Misalnya, untuk membuat file .hal HIDL untuk 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

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

aktivitas s2

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

c2hal mengidentifikasi struct yang berisi pointer fungsi dalam menyediakan file {i>header<i} dan mengonversi setiap struct menjadi file antarmuka terpisah. Misalnya, alloc_device_t dikonversi menjadi Modul HAL IAllocDevice (dalam file IAllocDevice.hal).

Semua jenis data lainnya disalin ke dalam file types.hal. Pendefinisian pound dipindahkan ke enum, dan item yang bukan bagian dari HIDL atau bukan konvertibel (seperti deklarasi fungsi statis) disalin ke dalam komentar 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 ini, saat c2hal menemukan pointer dalam file header, tahu apakah {i>pointer<i} harus ditafsirkan sebagai larik atau sebagai referensi untuk objek lain. Pointer kosong juga buram.

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

Mengimplementasikan HAL

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

Setelah makefile diperbarui, Anda siap untuk membuat file {i>header<i} dan mengimplementasikan metode. Untuk detail tentang cara menerapkan antarmuka yang dihasilkan, lihat HIDL C++ (untuk C++ implementasi) atau HIDL Java (untuk implementasi Java).