रेफ़रंस के तौर पर लागू करना

हम AIDL VHAL के लिए, लागू करने का रेफ़रंस उपलब्ध कराते हैं. मुख्य सेवा थ्रेड को VehicleService.cpp पर लागू किया गया है. VHAL इंटरफ़ेस को लागू करने का तरीका, DefaultVehicleHal.cpp पर बताया गया है.

रेफ़रंस लागू करने की सुविधा, दो लेयर वाले आर्किटेक्चर पर आधारित है. ऊपरी लेयर पर, DefaultVehicleHal, VHAL AIDL इंटरफ़ेस लागू करता है और सभी हार्डवेयर डिवाइसों के लिए VHAL लॉजिक उपलब्ध कराता है. निचली लेयर पर, FakeVehicleHardware, IVehicleHardware इंटरफ़ेस लागू करता है. यह क्लास, असली हार्डवेयर या वाहन बस के साथ इंटरैक्ट करने के VHAL लॉजिक को सिम्युलेट करती है. यह डिवाइस के हिसाब से होती है. इसके अलावा, वेंडर अपनी ज़रूरत के हिसाब से, इस आर्किटेक्चर का इस्तेमाल कर सकते हैं. साथ ही, वे उसी DefaultVehicleHal क्लास का फिर से इस्तेमाल कर सकते हैं (किसी तरीके को बदलने के लिए उसे बड़ा करके). इसके अलावा, वे अपना IVehicleHardware लागू करने का तरीका भी दे सकते हैं.

VHAL को रेफ़रंस के तौर पर लागू करना
पहली इमेज. VHAL को रेफ़रंस के तौर पर लागू करना

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 के साथ काम करने वाली प्रॉपर्टी का कॉन्फ़िगरेशन, हार्ड कोड न हो. साथ ही, शुरू होने के समय डाइनैमिक तरीके से तय किया जा सके. डिवाइस शुरू होने के बाद, वाहन की प्रॉपर्टी का कॉन्फ़िगरेशन स्टैटिक होना चाहिए.