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
aracı, dönüştürme işinin çoğunu üstlenerek gerekli manuel değişiklik sayısını azaltır. Örneğin, NFC HAL için bir HIDL .hal
dosyası oluşturmak için:
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/
dizinine dosya ekler. $ANDROID_BUILD_TOP dizininden hardware/interfaces/update-makefiles.sh
dosyasını çalıştırmak aynı zamanda gerekli makefile dosyasını HAL'a ekleyecektir. Buradan HAL'ı tamamen dönüştürmek için manuel değişiklikler yapabilirsiniz.
c2hal faaliyetleri
c2hal
çalıştırdığınızda başlık dosyasındaki her şey .hal
dosyalarına aktarılır.
c2hal
sağlanan başlık dosyasındaki işlev işaretçilerini 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 dönüştürülür ( IAllocDevice.hal
dosyasında).
Diğer tüm veri türleri bir types.hal
dosyasına kopyalanır. Pound tanımları numaralandırmalara taşınır ve HIDL'nin parçası olmayan veya dönüştürülemeyen öğeler (statik işlev bildirimleri gibi) " NOTE
" metniyle işaretlenmiş açıklamalara kopyalanır.
Manuel aktiviteler
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
başlık 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. Boşluk işaretçileri de benzer şekilde opaktır.
HIDL'ye geçiş sırasında int reserved[7]
gibi alanların manuel olarak kaldırılması gerekir. Dönüş değerinin adı gibi öğeler daha anlamlı bir şekilde güncellenmelidir; örneğin, NFC'de write
gibi yöntemlerin dönüş parametresini otomatik olarak oluşturulan int32_t write_ret
Status status
dönüştürmek (burada Status
, olası NFC durumlarını içeren yeni bir numaralandırmadır).
HAL'in uygulanması
HAL'inizi temsil edecek .hal
dosyalarını oluşturduktan sonra, C++ ve Java'da dil desteğini oluşturan makefile dosyalarını (Make veya Soong) oluşturmanız gerekir (HAL, Java'da desteklenmeyen bir özellik kullanmıyorsa). ./hardware/interfaces/update-makefiles.sh
betiği hardware/interfaces
dizininde bulunan HAL'ler için otomatik olarak makefile dosyaları oluşturabilir (diğer konumlardaki HAL'ler için betiği güncellemeniz yeterlidir).
Makefile dosyaları güncel olduğunda başlık dosyaları oluşturmaya ve yöntemleri uygulamaya hazır olursunuz. Oluşturulan arayüzün uygulanmasına ilişkin ayrıntılar için bkz. HIDL C++ (C++ uygulamaları için) veya HIDL Java (Java uygulamaları için).