वाहन हार्डवेयर एब्स्ट्रैक्शन लेयर (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
स्टेटस दिखना चाहिए. उदाहरण के लिए, एचवीएसी का तापमान
पहली इमेज. एचवीएसी का तापमान पाना (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
.
दूसरी इमेज. एचवीएसी तापमान सेट करें (सीएस = 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 मैसेज के टाइप की सूची दी गई है. इस एन्कैम के इस्तेमाल से, वाहन की प्रॉपर्टी के इंटिजर कलेक्शन में पहला इंटिजर तय होता है. साथ ही, यह भी तय होता है कि बाकी मैसेज को कैसे डिकोड किया जाए.