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