hardware/libhardware/include/hardware
bölümündeki başlığı dönüştürerek önceden var olan HAL modüllerini HIDL HAL modüllerine güncelleyebilirsiniz.
c2hal'i kullanma
c2hal
Bu araç, dönüşüm çalışmalarının çoğunu gerçekleştirerek manuel değişiklik sayısını azaltır. Örneğin, NFC HAL için bir HIDL .hal
dosyası oluşturmak istiyorsanız:
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
Bu komutlar, hardware/interfaces/nfc/1.0/
klasörüne dosya ekler. $ANDROID_BUILD_TOP
dizininden hardware/interfaces/update-makefiles.sh
çalıştırıldığında gerekli makefile de HAL'e eklenir. Buradan, HAL'i tamamen dönüştürmek için manuel değişiklikler yapabilirsiniz.
c2hal etkinlikleri
c2hal
'ü çalıştırdığınızda başlık dosyasındaki her şey .hal
dosyalarına aktarılır.
c2hal
, sağlanan üstbilgi dosyasında işlev işaretçileri içeren yapıları tanımlar ve her yapıyı ayrı bir arayüz dosyasına dönüştürür.
Örneğin, alloc_device_t
, IAllocDevice
HAL modülüne (IAllocDevice.hal
dosyasında) dönüştürülür.
Diğer tüm veri türleri bir types.hal
dosyasına kopyalanır.
Pound tanımları enum'lara taşınır ve HIDL'nin parçası olmayan veya dönüştürülemeyen öğeler ("NOTE
" metniyle işaretlenmiş yorumlara kopyalanır.
Manuel etkinlikler
c2hal
aracı, belirli yapılarla karşılaştığında ne yapacağını bilemez. Örneğin, HIDL'de ham işaretçi kavramı yoktur. Bu nedenle, c2hal
üstbilgi dosyalarında bir işaretçiyle karşılaştığında işaretçinin dizi olarak mı yoksa başka bir nesneye referans olarak mı yorumlanacağını bilemez. Boş işaretçiler de benzer şekilde opaktır.
int reserved[7]
gibi alanlar HIDL'ye geçiş sırasında manuel olarak kaldırılmalıdır. Döndürülen değerin adı gibi öğeler daha anlamlı bir şekilde güncellenmelidir. Örneğin, NFC'deki write
gibi yöntemlerin döndürülen parametresi, otomatik olarak oluşturulan int32_t write_ret
değerinden Status status
değerine dönüştürülmelidir (Status
, olası NFC durumlarını içeren yeni bir enumdur).
HAL'i uygulama
HAL'inizi temsil edecek .hal
dosyaları oluşturduktan sonra, C++ ve Java'da dil desteğini oluşturan makefile'leri (Make veya Soong) oluşturmanız gerekir (HAL, Java'da desteklenmeyen bir özellik kullanmıyorsa). ./hardware/interfaces/update-makefiles.sh
komut dosyası, hardware/interfaces
dizininde bulunan HAL'ler için makefile'leri otomatik olarak oluşturabilir (diğer konumlardaki HAL'ler için komut dosyasını güncellemeniz yeterlidir).
Makefile'ler güncel olduğunda başlık dosyaları oluşturmaya ve yöntemleri uygulamaya hazırsınızdır. Oluşturulan arayüzü uygulamayla ilgili ayrıntılar için HIDL C++'ye (C++ uygulamaları için) veya HIDL Java'ya (Java uygulamaları için) bakın.