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