Anda dapat mengupdate modul HAL yang sudah ada ke 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.
Aktivitas c2hal
Saat Anda menjalankan c2hal
, semua yang ada dalam file header akan ditransfer
ke file .hal
.
c2hal
mengidentifikasi struct yang berisi pointer fungsi dalam
file header yang disediakan 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
.
Pound-define dipindahkan ke enum, dan item yang bukan bagian dari HIDL atau tidak
dapat dikonversi (seperti deklarasi fungsi statis) disalin ke 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
hal ini, saat c2hal
menemukan pointer dalam file header, c2hal
tidak
mengetahui apakah pointer harus ditafsirkan sebagai array atau sebagai referensi ke
objek lain. Pointer void juga sama buramnya.
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 secara otomatis menjadi Status status
(dengan
Status
adalah enum baru yang berisi kemungkinan status NFC).
Mengimplementasikan HAL
Setelah membuat file .hal
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). Skrip
./hardware/interfaces/update-makefiles.sh
dapat otomatis
membuat file make untuk HAL yang berada di direktori
hardware/interfaces
(untuk HAL di lokasi lain, cukup perbarui skrip).
Jika makefile sudah yang terbaru, Anda siap membuat file header dan menerapkan metode. Untuk mengetahui detail tentang cara menerapkan antarmuka yang dihasilkan, lihat HIDL C++ (untuk implementasi C++) atau HIDL Java (untuk implementasi Java).