वाहन की प्रॉपर्टी

व्हीकल हार्डवेयर एब्स्ट्रैक्शन लेयर (वीएचएएल) इंटरफ़ेस, उन प्रॉपर्टी के बारे में बताता है जिन्हें OEM लागू कर सकते हैं. साथ ही, इसमें प्रॉपर्टी का मेटाडेटा भी शामिल होता है. उदाहरण के लिए, प्रॉपर्टी एक int है या नहीं और बदलाव के लिए कौनसे मोड इस्तेमाल किए जा सकते हैं. VHAL इंटरफ़ेस, किसी प्रॉपर्टी को ऐक्सेस करने (रीड, राइट, सदस्यता) पर आधारित है. यह किसी खास फ़ंक्शन के लिए एब्स्ट्रैक्शन है.

एचएएल इंटरफ़ेस

VHAL इन इंटरफ़ेस का इस्तेमाल करता है:

  • getAllPropConfigs() (vec<VehiclePropConfig>propConfigs) जनरेट करता है
    VHAL के साथ काम करने वाली सभी प्रॉपर्टी के कॉन्फ़िगरेशन की सूची बनाएं. CarService सिर्फ़ उन प्रॉपर्टी का इस्तेमाल करता है जिनके साथ काम करता है.
  • getPropConfigs(vec<int32_t> props) (StatusCode status,vec<VehiclePropConfig> propConfigs); जनरेट करता है
    चुनी गई प्रॉपर्टी का कॉन्फ़िगरेशन दिखाता है.
  • set(VehiclePropValue propValue), (StatusCodestatus); जनरेट करता है
    प्रॉपर्टी में कोई वैल्यू लिखें. डेटा डालने का नतीजा, हर प्रॉपर्टी के हिसाब से तय होता है.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options), (StatusCode status); जनरेट करता है
    प्रॉपर्टी की वैल्यू में हुए बदलाव को मॉनिटर करना शुरू करें. ज़ोन वाली प्रॉपर्टी के लिए, unsubscribe(IVehicleCallback callback, int32_t propId) (StatusCode status); जनरेट करता है

VHAL, इन कॉलबैक इंटरफ़ेस का इस्तेमाल करता है:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    वाहन की प्रॉपर्टी की वैल्यू में हुए बदलाव की सूचना देता है. सिर्फ़ सदस्यता वाली प्रॉपर्टी के लिए किया जाना चाहिए.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    ग्लोबल VHAL लेवल की गड़बड़ी या हर प्रॉपर्टी की गड़बड़ी दिखाएं. ग्लोबल गड़बड़ी की वजह से, एचएएल फिर से शुरू हो जाता है. इससे अन्य कॉम्पोनेंट (ऐप्लिकेशन भी शामिल हैं) फिर से शुरू हो सकते हैं.

वाहन की प्रॉपर्टी

प्रॉपर्टी, रीड-ओनली, सिर्फ़ लिखने के लिए (VHAL लेवल पर जानकारी भेजने के लिए इस्तेमाल की जाती है) या रीड और राइट (ज़्यादातर प्रॉपर्टी के लिए सहायता ज़रूरी नहीं है) हो सकती हैं. हर प्रॉपर्टी की पहचान, int32 कुंजी से की जाती है. साथ ही, इसमें पहले से तय किया गया टाइप (value_type) होता है:

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

ज़ोन वाली प्रॉपर्टी में एक से ज़्यादा वैल्यू हो सकती हैं. यह इस बात पर निर्भर करता है कि प्रॉपर्टी में कितने ज़ोन काम करते हैं.

क्षेत्र के टाइप

VHAL में, इलाके के कई टाइप तय किए गए हैं:

इलाके का टाइप ब्यौरा
GLOBAL यह प्रॉपर्टी सिंगलटन है और इसमें एक से ज़्यादा एरिया नहीं होते.
WINDOW विंडो के आधार पर क्षेत्र, VehicleAreaWindow enum का इस्तेमाल करता है.
MIRROR मिरर के आधार पर क्षेत्र, VehicleAreaMirror enum का इस्तेमाल करता है.
SEAT सीटों के आधार पर क्षेत्र, VehicleAreaSeat enum का इस्तेमाल करता है.
DOOR दरवाज़ों के आधार पर क्षेत्र, VehicleAreaDoor enum का इस्तेमाल करता है.
WHEEL यह एरिया, VehicleAreaWheel enum का इस्तेमाल करता है.

ज़ोन वाली हर प्रॉपर्टी के लिए, पहले से तय किए गए इलाके के टाइप का इस्तेमाल करना ज़रूरी है. हर इलाके के टाइप के लिए, एक 'एनम' में बिट फ़्लैग का एक सेट तय किया गया है. उदाहरण के लिए, SEAT एरिया VehicleAreaSeat एनम को तय करता है:

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

क्षेत्र के आईडी

ज़ोन वाली प्रॉपर्टी को एरिया आईडी की मदद से ऐक्सेस किया जाता है. ज़ोन वाली हर प्रॉपर्टी में एक या एक से ज़्यादा क्षेत्र आईडी काम कर सकते हैं. एरिया आईडी, अपने संबंधित एनम से एक या उससे ज़्यादा फ़्लैग से बना होता है. उदाहरण के लिए, VehicleAreaSeat का इस्तेमाल करने वाली प्रॉपर्टी, इन एरिया आईडी का इस्तेमाल कर सकती है:

आइटम ब्यौरा
ROW_1_LEFT | ROW_1_RIGHT एरिया आईडी, दोनों सामने की सीटों पर लागू होता है.
ROW_2_LEFT यह सिर्फ़ पीछे की बाईं सीट पर लागू होता है.
ROW_2_RIGHT यह सिर्फ़ पीछे की दाईं सीट पर लागू होता है.

प्रॉपर्टी का स्टेटस

हर प्रॉपर्टी वैल्यू के साथ एक VehiclePropertyStatus वैल्यू होती है. इससे प्रॉपर्टी की मौजूदा स्थिति के बारे में पता चलता है:

आइटम ब्यौरा
AVAILABLE प्रॉपर्टी उपलब्ध है और वैल्यू मान्य है.
UNAVAILABLE फ़िलहाल, प्रॉपर्टी की वैल्यू उपलब्ध नहीं है. इसका इस्तेमाल, किसी ऐसी प्रॉपर्टी के लिए कुछ समय के लिए बंद की गई सुविधाओं के लिए किया जाता है जो इस सुविधा के साथ काम करती है.
ERROR इस प्रॉपर्टी में कोई गड़बड़ी है.

प्रॉपर्टी कॉन्फ़िगर करना

हर प्रॉपर्टी के लिए कॉन्फ़िगरेशन की जानकारी देने के लिए, VehiclePropConfig का इस्तेमाल करें. इसमें यह जानकारी शामिल है:

वैरिएबल ब्यौरा
access r, w, rw
changeMode इससे पता चलता है कि किसी प्रॉपर्टी को बदलाव के हिसाब से या लगातार मॉनिटर किया जाता है.
areaConfigs areaId, min, और max वैल्यू.
configArray कॉन्फ़िगरेशन के अन्य पैरामीटर.
configString स्ट्रिंग के तौर पर दी गई अतिरिक्त जानकारी.
minSampleRate maxSampleRate
prop प्रॉपर्टी आईडी, int

ज़ोन प्रॉपर्टी को मैनेज करना

ज़ोन वाली प्रॉपर्टी, एक से ज़्यादा प्रॉपर्टी के कलेक्शन के बराबर होती है. इसमें, हर सब-प्रॉपर्टी को तय किए गए एरिया आईडी की वैल्यू से ऐक्सेस किया जा सकता है.

  • get ज़ोन वाली प्रॉपर्टी के लिए कॉल में, अनुरोध में हमेशा क्षेत्र का आईडी शामिल होता है. इसलिए, अनुरोध किए गए एरिया आईडी की सिर्फ़ मौजूदा वैल्यू दिखाई जाती है. अगर प्रॉपर्टी ग्लोबल है, तो क्षेत्र का आईडी 0 होता है.
  • set ज़ोन वाली प्रॉपर्टी के लिए कॉल करने पर, अनुरोध में हमेशा क्षेत्र का आईडी शामिल होता है. इसलिए, सिर्फ़ उस एरिया आईडी में बदलाव किया जाता है जिसके लिए अनुरोध किया गया है.
  • subscribe कॉल, प्रॉपर्टी के सभी एरिया आईडी के लिए इवेंट जनरेट करता है.

कॉल पाना

शुरू करने के दौरान, हो सकता है कि प्रॉपर्टी की वैल्यू अभी उपलब्ध न हो, क्योंकि मैच करने वाला वाहन नेटवर्क मैसेज अब तक नहीं मिला है. ऐसे मामलों में, get कॉल से -EAGAIN दिखना चाहिए. कुछ प्रॉपर्टी (जैसे, एचवीएसी) के लिए, चालू/बंद करने की अलग से पावर प्रॉपर्टी होती है. ऐसी प्रॉपर्टी के लिए get को कॉल करने पर (जब पावर बंद हो), गड़बड़ी के बजाय UNAVAILABLE स्टेटस दिखना चाहिए. उदाहरण के लिए, एचवीएसी का तापमान

वीएचएएल से एचवीएसी की जानकारी पाने का उदाहरण

पहली इमेज. एचवीएसी का तापमान पाना (CS = CarService, VHAL = Vehicle HAL)

कॉल सेट करना

आम तौर पर, set कॉल से वाहन नेटवर्क में बदलाव का अनुरोध किया जाता है. set कॉल, आम तौर पर एक एसिंक्रोनस ऑपरेशन होता है, जो जल्द से जल्द रिटर्न करता है. हालांकि, यह सिंक्रोनस भी हो सकता है. कुछ set कॉल के लिए, शुरुआती डेटा तैयार होना ज़रूरी हो सकता है. हालांकि, ऐसा हो सकता है कि शुरू करने के दौरान, ऐसा डेटा उपलब्ध न हो. ऐसे मामलों में, set कॉल से StatusCode#TRY_AGAIN दिखना चाहिए. अलग-अलग चालू और बंद करने की सुविधा वाली कुछ प्रॉपर्टी के लिए, प्रॉपर्टी के बंद होने पर StatusCode#NOT_AVAILABLE या StatusCode#NOT_AVAILABLE_DISABLED दिखना चाहिए. साथ ही, set नहीं दिखना चाहिए. जब तक set को लागू नहीं किया जाता, तब तक get ज़रूरी नहीं है कि वही वैल्यू दिखाए जो सेट की गई है. उदाहरण के लिए, set HVAC Temperature.

वीएचएएल सेट एचवीएसी का उदाहरण

दूसरी इमेज. एचवीएसी सिस्टम का तापमान सेट करना (CS = CarService, VHAL = Vehicle HAL)

कस्टम प्रॉपर्टी मैनेज करना

पार्टनर की ज़रूरतों को पूरा करने के लिए, वीएचएएल में ऐसी कस्टम प्रॉपर्टी शामिल की गई हैं जो सिर्फ़ सिस्टम ऐप्लिकेशन के लिए उपलब्ध हैं. कस्टम प्रॉपर्टी के साथ काम करते समय, इन दिशा-निर्देशों का पालन करें:

  • प्रॉपर्टी आईडी, इन फ़ील्ड का इस्तेमाल करके जनरेट किया जाना चाहिए:
    • VehiclePropertyGroup:VENDOR
      VENDOR ग्रुप का इस्तेमाल सिर्फ़ कस्टम प्रॉपर्टी के लिए किया जाता है.
    • VehicleArea
      इलाके का सही टाइप चुनें.
    • VehiclePropertyType
      सही डेटा टाइप चुनें. BYTES टाइप की मदद से रॉ डेटा पास किया जा सकता है, जो ज़्यादातर मामलों में काफ़ी होता है. कस्टम प्रॉपर्टी के ज़रिए अक्सर ज़्यादा डेटा भेजने पर, वाहन के पूरे नेटवर्क का ऐक्सेस धीमा हो सकता है. इसलिए, ज़्यादा पेलोड जोड़ते समय सावधानी बरतें.
    • Property ID
      कस्टम प्रॉपर्टी के लिए चार नाइबल वाला आईडी चुनें.
  • पारिस्थितिकी तंत्र के अलग-अलग हिस्सों में बंटने से रोकने के लिए, कस्टम प्रॉपर्टी का इस्तेमाल, VehiclePropertyIds एसडीके में पहले से मौजूद वाहन की प्रॉपर्टी को दोहराने के लिए नहीं किया जाना चाहिए.
  • VehiclePropConfig.configString को भरें और कस्टम प्रॉपर्टी के बारे में कम शब्दों में जानकारी दें. इससे, गाड़ियों की मौजूदा प्रॉपर्टी के गलती से दोहराए जाने पर, जांच करने वाले टूल को फ़्लैग करने में मदद मिलती है. उदाहरण के लिए, "हज़र्ड लाइट की स्थिति."
  • CarPropertyManager (Java कॉम्पोनेंट के लिए) या Vehicle Network Service API (नेटिव के लिए) के ज़रिए ऐक्सेस करें. कार के अन्य एपीआई में बदलाव न करें, क्योंकि ऐसा करने से आने वाले समय में, कार के साथ काम करने से जुड़ी समस्याएं हो सकती हैं.
  • वेंडर प्रॉपर्टी लागू करने के बाद, वेंडर प्रॉपर्टी के लिए VehicleVendorPermission एनम में, अनुमतियों की सूची कोसिर्फ़ चुनें. सिस्टम प्रॉपर्टी पर वेंडर की अनुमतियों को मैप करने से, सीटीएस और वीटीएस काम नहीं करेगा.

एचवीएसी प्रॉपर्टी मैनेज करना

एचवीएस से जुड़ी प्रॉपर्टी सेट करके, VHAL का इस्तेमाल एचवीएस को कंट्रोल करने के लिए किया जा सकता है. ज़्यादातर एचवीएसी प्रॉपर्टी, ज़ोन वाली प्रॉपर्टी होती हैं. हालांकि, कई प्रॉपर्टी ज़ोन वाली नहीं होतीं (ग्लोबल प्रॉपर्टी). सैंपल के तौर पर तय की गई प्रॉपर्टी में ये शामिल हैं:

प्रॉपर्टी मकसद
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET हर ज़ोन के लिए तापमान सेट करें.
VEHICLE_PROPERTY_HVAC_RECIRC_ON हर ज़ोन के हिसाब से, रीसर्क्युलेशन को कंट्रोल करना.

एचवीएस प्रॉपर्टी की पूरी सूची देखने के लिए, VEHICLE_PROPERTY_HVAC_* में types.hal खोजें. जब एचवीएसी प्रॉपर्टी में VehicleAreaSeat का इस्तेमाल किया जाता है, तो ज़ोन वाली एचवीएसी प्रॉपर्टी को एरिया आईडी पर मैप करने के लिए, अतिरिक्त नियम लागू होते हैं. कार में उपलब्ध हर सीट, क्षेत्र के आईडी के कलेक्शन में मौजूद किसी क्षेत्र के आईडी का हिस्सा होनी चाहिए.

पहला उदाहरण. कार में दो आगे की सीटें (ROW_1_LEFT, ROW_1_RIGHT) और तीन पीछे की सीटें (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) हैं. कार में तापमान कंट्रोल करने की दो यूनिट हैं: ड्राइवर की तरफ़ और यात्री की तरफ़.

  • HVAC_TEMPERATURE SET के लिए, एरिया आईडी का मान्य मैपिंग सेट यह है:
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • एक ही हार्डवेयर कॉन्फ़िगरेशन के लिए, वैकल्पिक मैपिंग यह है:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

दूसरा उदाहरण. कार में तीन सीट की लाइनें हैं. इनमें आगे की पंक्ति में दो सीटें (ROW_1_LEFT, ROW_1_RIGHT), दूसरी पंक्ति में तीन सीटें (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT), और तीसरी पंक्ति में तीन सीटें (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT) हैं. कार में तापमान कंट्रोल करने वाली तीन यूनिट हैं: ड्राइवर की तरफ़, यात्री की तरफ़, और पीछे. HVAC_TEMPERATURE_SET को क्षेत्र के आईडी पर मैप करने का एक सही तरीका, तीन एलिमेंट वाले कलेक्शन के तौर पर है:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

सेंसर प्रॉपर्टी मैनेज करना

VHAL सेंसर प्रॉपर्टी, सेंसर का रीयल डेटा या नीति से जुड़ी जानकारी दिखाती हैं. जैसे, ड्राइविंग की स्थिति. सेंसर से मिली कुछ जानकारी (जैसे, ड्राइविंग की स्थिति और दिन/रात मोड) को बिना किसी पाबंदी के कोई भी ऐप्लिकेशन ऐक्सेस कर सकता है. ऐसा इसलिए, क्योंकि वाहन से जुड़ा सुरक्षित ऐप्लिकेशन बनाने के लिए यह डेटा ज़रूरी है. सेंसर से मिली अन्य जानकारी (जैसे, वाहन की रफ़्तार) ज़्यादा संवेदनशील होती है. इसके लिए, उपयोगकर्ताओं से कुछ खास अनुमतियां लेनी पड़ती हैं.

types.hal में, काम करने वाली सेंसर प्रॉपर्टी देखें.

गाड़ी में मैप इस्तेमाल करने की सुविधा

वाहन में मैप इस्तेमाल करने की सुविधा (वीएमएस), पब्लिश/सदस्यता इंटरफ़ेस की मदद से क्लाइंट के बीच मैप डेटा को एक्सचेंज करने की सुविधा उपलब्ध कराती है. इससे वाहन में मौजूद सामान्य सुविधाओं को बेहतर तरीके से काम करने में मदद मिलती है. जैसे, ड्राइवर की मदद करने वाले बेहतर सिस्टम (एडीएएस). क्लाइंट में, वीएचएएल या खास Android ऐप्लिकेशन में, VMS प्रॉपर्टी के ज़रिए इंटरफ़ेस करने वाले वाहन सिस्टम शामिल किए जा सकते हैं. गाड़ी में मैप इस्तेमाल करने की सुविधा (वीएमएस) पर शेयर किए गए डेटा का इस्तेमाल, वाहन के सिस्टम और काम करने वाले ऐप्लिकेशन के लिए, सिर्फ़ मैप डेटा के तौर पर किया जाता है.

वीएमएस का इस्तेमाल सिर्फ़ Android Automotive के साथ किया जा सकता है. AOSP में ऐसे डिफ़ॉल्ट क्लाइंट नहीं होते जो वीएमएस को पब्लिश या उसकी सदस्यता लेते हैं. VHAL में VMS प्रॉपर्टी के लिए, मैसेज टाइप और डेटा स्ट्रक्चर के बारे में VHAL 2.0 में बताया गया है. यह जानकारी VmsMessageType enum में दी गई है. इसमें, काम करने वाले VMS मैसेज के टाइप की सूची दी गई है. इस एन्यम का इस्तेमाल, वाहन की प्रॉपर्टी के इंटिजर कलेक्शन में पहले इंटिजर के तौर पर किया जाता है. साथ ही, यह तय करता है कि बाकी मैसेज को कैसे डिकोड किया जाए.