hardware/libhardware/include/hardware
में हेडर को बदलकर, पहले से मौजूद एचएएल मॉड्यूल को एचआईडीएल एचएएल मॉड्यूल में अपडेट किया जा सकता है.
c2hal का इस्तेमाल करना
c2hal
टूल, कन्वर्ज़न से जुड़े ज़्यादातर काम को मैनेज करता है. इससे मैन्युअल तरीके से किए जाने वाले बदलावों की संख्या कम हो जाती है. उदाहरण के लिए, एनएफ़सी एचएएल के लिए 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 में ज़रूरी मेकफ़ाइल भी जुड़ जाती है. यहां से, एचएएल को पूरी तरह बदलने के लिए मैन्युअल बदलाव किए जा सकते हैं.
c2hal गतिविधियां
c2hal
को चलाने पर, हेडर फ़ाइल में मौजूद सभी डेटा को .hal
फ़ाइलों में ट्रांसफ़र कर दिया जाता है.
c2hal
, दी गई हेडर फ़ाइल में फ़ंक्शन पॉइंटर वाले स्ट्रक्चर की पहचान करता है और हर स्ट्रक्चर को अलग इंटरफ़ेस फ़ाइल में बदल देता है.
उदाहरण के लिए, alloc_device_t
को IAllocDevice
HAL मॉड्यूल में बदला जाता है (IAllocDevice.hal
फ़ाइल में).
अन्य सभी तरह के डेटा को types.hal
फ़ाइल में कॉपी किया जाता है.
पाउंड-डेफ़ाइन को एनम में ले जाया जाता है. साथ ही, HIDL का हिस्सा नहीं होने वाले या बदले नहीं जा सकने वाले आइटम (जैसे, स्टैटिक-फ़ंक्शन के एलान) को "NOTE
" टेक्स्ट के साथ मार्क की गई टिप्पणियों में कॉपी किया जाता है.
मैन्युअल गतिविधियां
c2hal
टूल को पता नहीं होता कि कुछ खास कंस्ट्रक्ट मिलने पर उसे क्या करना है. उदाहरण के लिए, HIDL में रॉ पॉइंटर का कोई कॉन्सेप्ट नहीं है. इसलिए, जब c2hal
को हेडर फ़ाइलों में कोई पॉइंटर मिलता है, तो उसे यह पता नहीं चलता कि पॉइंटर को ऐरे के तौर पर समझा जाना चाहिए या किसी दूसरे ऑब्जेक्ट के रेफ़रंस के तौर पर. इसी तरह, शून्य पॉइंटर भी अस्पष्ट होते हैं.
HIDL पर ट्रांज़िशन के दौरान, int reserved[7]
जैसे फ़ील्ड को मैन्युअल तरीके से हटाना होगा. रिटर्न वैल्यू के नाम जैसे आइटम को ज़्यादा काम के आइटम में बदला जाना चाहिए. उदाहरण के लिए, एनएफ़सी में write
जैसे तरीकों के रिटर्न पैरामीटर को, अपने-आप जनरेट हुई वैल्यू int32_t write_ret
से Status status
में बदलना. यहां Status
एक नया एनम है, जिसमें एनएफ़सी की संभावित स्थितियां शामिल हैं.
HAL लागू करना
अपने एचएएल को दिखाने के लिए .hal
फ़ाइलें बनाने के बाद, आपको ऐसी मेकफ़ाइलें (Make या Soong) जनरेट करनी होंगी जो C++ और Java में भाषा के लिए सहायता बनाती हैं. ऐसा तब तक करना होगा, जब तक कि एचएएल में ऐसी सुविधा का इस्तेमाल न किया जा रहा हो जो Java में काम न करती हो. ./hardware/interfaces/update-makefiles.sh
स्क्रिप्ट, hardware/interfaces
डायरेक्ट्री में मौजूद एचएएल के लिए, अपने-आप मेकफ़ाइल जनरेट कर सकती है. दूसरी जगहों पर मौजूद एचएएल के लिए, बस स्क्रिप्ट को अपडेट करें.
मेकफ़ाइलें अप-टू-डेट होने के बाद, हेडर फ़ाइलें जनरेट की जा सकती हैं और तरीकों को लागू किया जा सकता है. जनरेट किए गए इंटरफ़ेस को लागू करने के बारे में जानकारी के लिए, HIDL C++ (C++ लागू करने के लिए) या HIDL Java (Java लागू करने के लिए) देखें.