हम एआईडीएल वीएचएएल के लिए एक संदर्भ कार्यान्वयन प्रदान करते हैं। मुख्य सेवा थ्रेड VehicleService.cpp
पर कार्यान्वित किया गया है। VHAL इंटरफ़ेस कार्यान्वयन DefaultVehicleHal.cpp
पर स्थित है।
संदर्भ कार्यान्वयन दो-परत वास्तुकला पर आधारित है। ऊपरी परत पर, DefaultVehicleHal
, VHAL AIDL इंटरफ़ेस लागू करता है और सभी हार्डवेयर उपकरणों के लिए VHAL लॉजिक जेनेरिक प्रदान करता है। निचली परत पर, FakeVehicleHardware
, IVehicleHardware
इंटरफ़ेस लागू करता है। यह वर्ग वास्तविक हार्डवेयर या वाहन बस के साथ इंटरैक्ट करने के वीएचएएल तर्क का अनुकरण करता है और डिवाइस-विशिष्ट है। वैकल्पिक रूप से, विक्रेता इसी आर्किटेक्चर को अनुकूलित कर सकते हैं, उसी DefaultVehicleHal
क्लास का पुन: उपयोग कर सकते हैं (एक विधि को ओवरराइट करने के लिए इसे विस्तारित कर सकते हैं), और अपना स्वयं का IVehicleHardware
कार्यान्वयन प्रदान कर सकते हैं।
DefaultVehicleHal
में निम्नलिखित तर्क शामिल हैं, जिन्हें सामान्य माना जाता है और यह किसी भी VHAL कार्यान्वयन पर लागू हो सकता है।
-
IVehicle
इंटरफ़ेस लागू करता है। - डुप्लिकेट आईडी की जांच सहित बुनियादी इनपुट जांच करता है।
- प्रत्येक बाइंडर क्लाइंट के लिए प्रत्येक ऑपरेशन के लिए क्लाइंट ऑब्जेक्ट (उदाहरण के लिए,
GetValuesClient
) आवंटित करता है, और प्रत्येक को एक वैश्विक पूल में जोड़ता है। - एसिंक कॉलबैक तर्क को प्रबंधित करता है, जैसे लंबित अनुरोध पूल में लंबित अनुरोध जोड़ना। जब हमें परिणाम प्राप्त होते हैं तो लंबित अनुरोधों का समाधान करता है या लंबित अनुरोधों में से एक का समय समाप्त होने पर त्रुटि देता है।
-
LargeParcelable
क्रमबद्ध और डिसेरिएलाइज करता है (देखेंParcelableUtils.h
)। - सदस्यता प्रबंधित करता है (
SubscriptionManager.h
देखें)। - अनुमतियाँ जाँचता है। (
checkReadPermission
औरcheckWritePermission
फ़ंक्शन देखें)। - समय-समय पर IVehicleHardware.checkHealth को कॉल करता है और दिल की धड़कन के संकेत भेजता है (
checkHealth
फ़ंक्शन देखें)।
IVehicleHardware
एक सामान्य इंटरफ़ेस है जिसका उपयोग VHAL के हार्डवेयर-विशिष्ट कार्यान्वयन को दर्शाने के लिए किया जाता है। IVehicleHardware
के लिए संदर्भ कार्यान्वयन FakeVehicleHardware
है, जो संपत्ति के मूल्य को संग्रहीत करने के लिए इन-मेमोरी मैप का उपयोग करता है और वास्तविक वाहन बस के साथ संचार नहीं करता है। इसका उद्देश्य एक एमुलेटर पर चलना है और इसमें कोई हार्डवेयर-विशिष्ट निर्भरता नहीं है। विक्रेता कार्यान्वयन को इसे वैसे ही उपयोग नहीं करना चाहिए और वाहन बस-विशिष्ट तर्क जोड़ना चाहिए।
एंड्रॉइड 14 में, FakeVehicleHardware
डिवाइस के /vendor/etc/automotive/vhalconfig/
फ़ोल्डर से आरंभीकरण के दौरान रन-टाइम पर समर्थित प्रॉपर्टी कॉन्फ़िगरेशन को पढ़ता है, जिसमें JSON-शैली कॉन्फ़िगरेशन फ़ाइल होती है। कॉन्फ़िगरेशन फ़ाइल स्वरूप और कॉन्फ़िगरेशन फ़ाइल सामग्री के लिए संदर्भ VHAL README फ़ाइल देखें।
FakeVehicleHardware
परीक्षण के लिए कॉन्फिग फ़ाइल ओवरराइड का भी समर्थन करता है। यदि सिस्टम प्रॉपर्टी persist.vendor.vhal_init_value_override
सेट है, तो यह मौजूदा कॉन्फ़िगरेशन को ओवरराइड करने के लिए डिवाइस पर /vendor/etc/automotive/vhaloverride/
फ़ोल्डर से कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है। एक विक्रेता कार्यान्वयन एक समान दृष्टिकोण का उपयोग कर सकता है ताकि वीएचएएल-समर्थित संपत्ति कॉन्फ़िगरेशन हार्ड-कोडित न हो और प्रारंभ समय पर गतिशील रूप से निर्णय लिया जा सके। डिवाइस चालू होने के बाद वाहन संपत्ति कॉन्फ़िगरेशन स्थिर होना चाहिए।