HAL modüllerini dönüştürme

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.