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

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

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