HAL मॉड्यूल बदलना

hardware/libhardware/include/hardware में हेडर को बदलकर, पहले से मौजूद HAL मॉड्यूल को HIDL HAL मॉड्यूल में बदला जा सकता है.

c2hal का इस्तेमाल करना

c2hal टूल, कन्वर्ज़न से जुड़े ज़्यादातर काम अपने-आप करता है. इससे, मैन्युअल तरीके से किए जाने वाले बदलावों की संख्या कम हो जाती है. उदाहरण के लिए, NFC HAL के लिए HIDL .hal फ़ाइल जनरेट करने के लिए:

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

इन निर्देशों से, hardware/interfaces/nfc/1.0/ में फ़ाइलें जोड़ी जाती हैं. $ANDROID_BUILD_TOP डायरेक्ट्री से hardware/interfaces/update-makefiles.sh चलाने पर, HAL में ज़रूरी मेकफ़ाइल भी जुड़ जाती है. यहां से, HAL को पूरी तरह से बदलने के लिए, मैन्युअल तरीके से बदलाव किए जा सकते हैं.

c2hal गतिविधियां

c2hal चलाने पर, हेडर फ़ाइल में मौजूद सभी चीज़ें .hal फ़ाइलों में ट्रांसफ़र हो जाती हैं.

c2hal, दी गई हेडर फ़ाइल में फ़ंक्शन पॉइंटर वाले स्ट्रक्चर की पहचान करता है. साथ ही, हर स्ट्रक्चर को अलग इंटरफ़ेस फ़ाइल में बदलता है. उदाहरण के लिए, alloc_device_t को IAllocDevice HAL मॉड्यूल में बदल दिया जाता है (IAllocDevice.hal फ़ाइल में).

अन्य सभी डेटा टाइप को types.hal फ़ाइल में कॉपी किया जाता है. पाउंड-डिफ़ाइन को enum में ले जाया जाता है. साथ ही, HIDL का हिस्सा न होने वाले या कन्वर्ट न किए जा सकने वाले आइटम (जैसे, स्टैटिक-फ़ंक्शन के एलान) को "NOTE" टेक्स्ट से मार्क की गई टिप्पणियों में कॉपी किया जाता है.

मैन्युअल गतिविधियां

c2hal टूल को यह नहीं पता कि कुछ कंस्ट्रक्ट मिलने पर क्या करना है. उदाहरण के लिए, HIDL में रॉ पॉइंटर का कोई कॉन्सेप्ट नहीं है. इस वजह से, जब c2hal को हेडर फ़ाइलों में कोई पॉइंटर मिलता है, तो उसे यह पता नहीं चलता कि पॉइंटर को ऐरे के तौर पर समझा जाना चाहिए या किसी अन्य ऑब्जेक्ट के रेफ़रंस के तौर पर. वॉइड पॉइंटर भी इसी तरह अपारदर्शी होते हैं.

HIDL पर ट्रांज़िशन के दौरान, int reserved[7] जैसे फ़ील्ड को मैन्युअल तरीके से हटाना होगा. जैसे, रिटर्न वैल्यू के नाम जैसी चीज़ों को ज़्यादा काम की जानकारी देने वाले नाम से अपडेट किया जाना चाहिए. उदाहरण के लिए, NFC में write जैसे तरीकों के रिटर्न पैरामीटर को अपने-आप जनरेट हुए int32_t write_ret से Status status में बदलना. यहां Status एक नया enum है, जिसमें NFC की संभावित स्थितियां शामिल हैं.

एचएएल लागू करना

अपने एचएएल को दिखाने के लिए .hal फ़ाइलें बनाने के बाद, आपको मेकफ़ाइलें (Make या Soong) जनरेट करनी होंगी. ये फ़ाइलें, C++ और Java में भाषा के लिए सहायता उपलब्ध कराती हैं. हालांकि, ऐसा तब तक किया जा सकता है, जब तक एचएएल में ऐसी सुविधा का इस्तेमाल न किया गया हो जो Java में काम नहीं करती. ./hardware/interfaces/update-makefiles.sh स्क्रिप्ट, hardware/interfaces डायरेक्ट्री में मौजूद एचएएल के लिए, अपने-आप मेकफ़ाइल जनरेट कर सकती है. अन्य जगहों पर मौजूद एचएएल के लिए, स्क्रिप्ट को अपडेट करें.

मेकफ़ाइलें अप-टू-डेट होने पर, हेडर फ़ाइलें जनरेट की जा सकती हैं और तरीकों को लागू किया जा सकता है. जनरेट किए गए इंटरफ़ेस को लागू करने के बारे में ज़्यादा जानकारी के लिए, HIDL C++ (C++ लागू करने के लिए) या HIDL Java (Java लागू करने के लिए) देखें.