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