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