Anda dapat memperbarui modul HAL yang sudah ada sebelumnya ke modul HIDL HAL dengan mengonversi header di hardware/libhardware/include/hardware
.
Menggunakan c2hal
Alat c2hal
menangani sebagian besar pekerjaan konversi, mengurangi jumlah perubahan manual yang diperlukan. Misalnya, untuk membuat file HIDL .hal
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 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 membuat perubahan manual untuk mengonversi HAL sepenuhnya.
kegiatan c2hal
Saat Anda menjalankan c2hal
, semua yang ada di file header ditransfer ke file .hal
.
c2hal
mengidentifikasi struct yang berisi pointer fungsi di file header yang disediakan dan mengubah setiap struct menjadi file antarmuka terpisah. Misalnya, alloc_device_t
dikonversi ke modul IAllocDevice
HAL (dalam file IAllocDevice.hal
).
Semua tipe data lainnya disalin ke dalam file types.hal
. Definisi Pound dipindahkan ke enum, dan item yang bukan merupakan bagian dari HIDL atau tidak dapat dikonversi (seperti deklarasi fungsi statis) disalin ke dalam komentar yang ditandai dengan teks " NOTE
".
Kegiatan manual
Alat c2hal
tidak tahu apa yang harus dilakukan ketika menemukan konstruksi tertentu. Misalnya, HIDL tidak memiliki konsep pointer mentah; karena itu, ketika c2hal
menemukan sebuah pointer di file header, ia tidak mengetahui apakah pointer tersebut harus ditafsirkan sebagai array atau sebagai referensi ke objek lain. Pointer kosong juga sama buramnya.
Bidang seperti int reserved[7]
harus dihapus secara manual selama transisi ke HIDL. Item seperti nama nilai yang dikembalikan harus diperbarui menjadi sesuatu yang lebih bermakna; misalnya, mengonversi parameter pengembalian metode seperti write
dalam NFC dari int32_t write_ret
yang dibuat secara otomatis ke Status status
(di mana Status
adalah enum baru yang berisi kemungkinan status NFC).
Melaksanakan HAL
Setelah Anda membuat file .hal
untuk mewakili HAL Anda, Anda harus membuat makefile (Make atau Soong) yang membuat dukungan bahasa di C++ dan Java (kecuali HAL menggunakan fitur yang tidak didukung di Java). Skrip ./hardware/interfaces/update-makefiles.sh
dapat secara otomatis menghasilkan makefile untuk HAL yang terletak di direktori hardware/interfaces
(untuk HAL di lokasi lain, cukup perbarui skripnya).
Ketika makefile sudah diperbarui, Anda siap membuat file header dan mengimplementasikan metode. Untuk detail tentang implementasi antarmuka yang dihasilkan, lihat HIDL C++ (untuk implementasi C++) atau HIDL Java (untuk implementasi Java).