एचएएल मॉड्यूल परिवर्तित करना

आप हेडर को hardware/libhardware/include/hardware में परिवर्तित करके पहले से मौजूद एचएएल मॉड्यूल को एचआईडीएल एचएएल मॉड्यूल में अपडेट कर सकते हैं।

C2hal का उपयोग करना

c2hal टूल अधिकांश रूपांतरण कार्य को संभालता है, जिससे आवश्यक मैन्युअल परिवर्तनों की संख्या कम हो जाती है। उदाहरण के लिए, एनएफसी एचएएल के लिए एक एचआईडीएल .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 फ़ाइल में कॉपी किया जाता है। पाउंड-डिफ़ाइन को एनम में ले जाया जाता है, और आइटम जो एचआईडीएल का हिस्सा नहीं हैं या परिवर्तनीय नहीं हैं (जैसे स्थिर-फ़ंक्शन घोषणाएं) को " NOTE " टेक्स्ट के साथ चिह्नित टिप्पणियों में कॉपी किया जाता है।

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

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

HIDL में संक्रमण के दौरान int reserved[7] जैसे फ़ील्ड को मैन्युअल रूप से हटाया जाना चाहिए। रिटर्न वैल्यू के नाम जैसी वस्तुओं को और अधिक सार्थक रूप में अद्यतन किया जाना चाहिए; उदाहरण के लिए, एनएफसी में write जैसे तरीकों के रिटर्न पैरामीटर को ऑटोजेनरेटेड int32_t write_ret से Status status में परिवर्तित करना (जहां Status एक नया एनम है जिसमें संभावित एनएफसी स्टेटस शामिल हैं)।

एचएएल का कार्यान्वयन

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

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