हम एआईडीएल वीएचएएल के लिए,
लागू करने का रेफ़रंस
उपलब्ध कराते हैं. मुख्य सेवा थ्रेड को VehicleService.cpp
पर लागू किया गया है.
वीएचएएल इंटरफ़ेस को लागू करने का तरीका, DefaultVehicleHal.cpp
पर मौजूद है.
रेफ़रंस लागू करने का तरीका, दो लेयर वाले आर्किटेक्चर पर आधारित है. ऊपरी लेयर पर,
DefaultVehicleHal
, वीएचएएल एआईडीएल इंटरफ़ेस को लागू करता है और सभी हार्डवेयर डिवाइसों के लिए वीएचएएल लॉजिक उपलब्ध कराता है. निचली लेयर पर, 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
सेट है (इस प्रॉपर्टी को बिल्ड के समय या VHAL के शुरू होने से पहले, बूट के दौरान बहुत पहले सेट किया जाना चाहिए), तो यह डिवाइस पर /vendor/etc/automotive/vhaloverride/
फ़ोल्डर में मौजूद कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करके, मौजूदा कॉन्फ़िगरेशन को बदल देता है. वेंडर, लागू करने के लिए इसी तरह का तरीका अपना सकता है, ताकि VHAL के साथ काम करने वाली प्रॉपर्टी का कॉन्फ़िगरेशन, हार्ड कोड न हो. साथ ही, शुरू होने के समय डाइनैमिक तरीके से तय किया जा सके.
वीएचएएल शुरू होने के बाद, वाहन की प्रॉपर्टी कॉन्फ़िगरेशन की सूची स्टैटिक होनी चाहिए.
Android 16 से, GRPCVehicleHardware
एक और रेफ़रंस IVehicleHardware
लागू करता है. लागू करने के इस तरीके में यह माना जाता है कि किसी रिमोट मशीन या वर्चुअल मशीन पर एक अलग सर्वर चल रहा है, जिसमें प्रॉपर्टी मैनेज करने का लॉजिक शामिल है. AAOS डिवाइसों पर चलने वाला वीएचएएल, प्रॉक्सी के तौर पर काम करता है. यह रिमोट सर्वर पर अनुरोध भेजता है. ज़्यादा जानकारी के लिए, grpc पर जाएं.