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

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

HAL इंटरफ़ेस

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 area 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 स्टेटस दिखना चाहिए. उदाहरण के लिए, एचवीएसी का तापमान

VHAL get HVAC example

पहली इमेज. एचवीएसी का तापमान पाना (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.

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

दूसरी इमेज. एचवीएसी तापमान सेट करें (सीएस = CarService, VHAL = वाहन एचएएल)

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

पार्टनर की खास ज़रूरतों को पूरा करने के लिए, वीएचएएल ऐसी कस्टम प्रॉपर्टी की अनुमति देता है जो सिस्टम के ऐप्लिकेशन तक सीमित होती हैं. कस्टम प्रॉपर्टी के साथ काम करते समय, इन दिशा-निर्देशों का पालन करें:

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

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

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

प्रॉपर्टी मकसद
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 में, काम करने वाली सेंसर प्रॉपर्टी देखें.

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

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

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