hardware/libhardware/include/hardware
içindeki başlığı dönüştürerek önceden var olan HAL modüllerini HIDL HAL modüllerine güncelleyebilirsiniz.
c2hal kullanma
c2hal
Dönüşüm aracının çoğu, dönüşüm işinin büyük bir kısmını halleder ve gerekli manuel değişikliklerin sayısını azaltır. Örneğin, NFC HAL için bir HIDL .hal
dosyası oluşturmak üzere:
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/
içindeki dosyaları ekler. $ANDROID_BUILD_TOP
dizininden hardware/interfaces/update-makefiles.sh
çalıştırmak, gerekli makefile'ı da HAL'ye ekler. Buradan, HAL'yi tamamen dönüştürmek için manuel değişiklikler yapabilirsiniz.
c2hal etkinlikleri
c2hal
komutunu ç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 types.hal
dosyasına kopyalanır.
Pound-defines, enumlara taşınır ve HIDL'nin parçası olmayan veya dönüştürülemeyen öğeler (ör. statik işlev bildirimleri) "NOTE
" metniyle işaretlenmiş yorumlara kopyalanır.
Manuel etkinlikler
c2hal
aracı, belirli yapıları gördüğünde ne yapacağını bilmiyor. Ö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 bir dizi olarak mı yoksa başka bir nesneye referans olarak mı yorumlanması gerektiğini bilemez. Void işaretçiler de benzer şekilde opak olur.
int reserved[7]
gibi alanlar, HIDL'ye geçiş sırasında manuel olarak kaldırılmalıdır. Dönüş değerinin adı gibi öğeler daha anlamlı bir şekilde güncellenmelidir. Örneğin, NFC'deki write
gibi yöntemlerin dönüş parametresini otomatik olarak oluşturulan int32_t write_ret
değerinden Status status
değerine dönüştürme (burada Status
, olası NFC durumlarını içeren yeni bir enum'dur).
HAL'yi uygulama
HAL'nizi temsil edecek .hal
dosyaları oluşturduktan sonra, C++ ve Java'da dil desteği oluşturan makefile'ları (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 otomatik olarak makefile oluşturabilir (diğer konumlardaki HAL'ler için komut dosyasını güncellemeniz yeterlidir).
Makefile'lar güncel olduğunda başlık dosyaları oluşturmaya ve yöntemleri uygulamaya hazırsınızdır. Oluşturulan arayüzü uygulama hakkında ayrıntılı bilgi için HIDL C++ (C++ uygulamaları için) veya HIDL Java (Java uygulamaları için) başlıklı makaleyi inceleyin.