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).