व्हीकल हार्डवेयर एब्स्ट्रेक्शन लेयर (VHAL) इंटरफ़ेस उन गुणों को परिभाषित करता है जिन्हें OEM लागू कर सकते हैं और इसमें संपत्ति मेटाडेटा शामिल है (उदाहरण के लिए, क्या संपत्ति एक int है और कौन से परिवर्तन मोड की अनुमति है)। VHAL इंटरफ़ेस एक संपत्ति तक पहुँचने (पढ़ने, लिखने, सदस्यता लेने) पर आधारित है, जो एक विशिष्ट फ़ंक्शन के लिए एक अमूर्त है।
एचएएल इंटरफेस
वीएचएएल निम्नलिखित इंटरफेस का उपयोग करता है:
-
getAllPropConfigs()
उत्पन्न करता है(vec<VehiclePropConfig>propConfigs)
वीएचएएल द्वारा समर्थित सभी संपत्तियों के विन्यास की सूची बनाएं। 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);
वीएचएएल निम्नलिखित कॉलबैक इंटरफेस का उपयोग करता है:
-
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 का उपयोग करता है। |
प्रत्येक ज़ोन की गई संपत्ति को एक पूर्व-निर्धारित क्षेत्र प्रकार का उपयोग करना चाहिए। प्रत्येक क्षेत्र प्रकार में क्षेत्र प्रकार के लिए एक एनम में परिभाषित बिट फ़्लैग का एक सेट होता है। उदाहरण के लिए, SEAT
क्षेत्र VehicleAreaSeat
enums को परिभाषित करता है:
-
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
स्थिति वापस करनी चाहिए। उदाहरण के लिए, एचवीएसी तापमान प्राप्त करें
चित्र 1 . एचवीएसी तापमान प्राप्त करें (सीएस = कार सेवा, वीएचएएल = वाहन एचएएल)
कॉल सेट करें
एक set
कॉल एक एसिंक्रोनस ऑपरेशन है जिसमें अनुरोधित परिवर्तन किए जाने के बाद ईवेंट अधिसूचना शामिल होती है। एक विशिष्ट ऑपरेशन में, एक set
कॉल पूरे वाहन नेटवर्क में परिवर्तन का अनुरोध करने की ओर ले जाती है। कुछ set
कॉलों के लिए प्रारंभिक डेटा तैयार होने की आवश्यकता हो सकती है लेकिन आरंभीकरण के दौरान, ऐसा डेटा अभी तक उपलब्ध नहीं हो सकता है। ऐसे मामलों में, set
कॉल -EAGAIN
वापस आनी चाहिए। अलग-अलग पावर ऑन/ऑफ वाली कुछ संपत्तियों को वापस लौटना चाहिए -ESHUTDOWN
जब संपत्ति बंद हो जाती है और सेट नहीं किया जा सकता है। जब तक set
को प्रभावी नहीं बनाया जाता है, तब तक get
करना आवश्यक रूप से वही मान नहीं लौटाता है जो सेट किया गया है। उदाहरण के लिए, set HVAC Temperature
।
चित्र 2 । एचवीएसी तापमान सेट करें (सीएस = कार सेवा, वीएचएएल = वाहन एचएएल)
कस्टम गुणों को संभालना
पार्टनर-विशिष्ट जरूरतों का समर्थन करने के लिए, वीएचएएल कस्टम गुणों की अनुमति देता है जो सिस्टम ऐप्स तक सीमित हैं। कस्टम प्रॉपर्टी के साथ काम करते समय निम्नलिखित दिशानिर्देशों का उपयोग करें:
- निम्नलिखित क्षेत्रों का उपयोग करके संपत्ति आईडी उत्पन्न की जानी चाहिए:
-
VehiclePropertyGroup:VENDOR
VENDOR
समूह का उपयोग केवल कस्टम गुणों के लिए किया जाता है। -
VehicleArea
एक उपयुक्त क्षेत्र प्रकार का चयन करें। -
VehiclePropertyType
उचित डेटा प्रकार का चयन करें।BYTES
प्रकार कच्चे डेटा को पारित करने की अनुमति देता है जो ज्यादातर मामलों में पर्याप्त है। कस्टम प्रॉपर्टी के माध्यम से बार-बार बड़ा डेटा भेजना पूरे वाहन नेटवर्क एक्सेस को धीमा कर सकता है - एक बड़ा पेलोड जोड़ते समय सावधान रहें। -
Property ID
कस्टम प्रॉपर्टी के लिए चार निबल आईडी चुनें।
-
- पारिस्थितिकी तंत्र के विखंडन को रोकने के लिए, कस्टम गुणों का उपयोग वाहन गुणों को दोहराने के लिए नहीं किया जाना चाहिए जो पहले से मौजूद हैं ( VehiclePropertyIds SDK).
- कस्टम प्रॉपर्टी के संक्षिप्त विवरण के साथ
VehiclePropConfig.configString
भरें। यह मौजूदा वाहन संपत्तियों की आकस्मिक प्रतिकृति को चिह्नित करने के लिए विवेक जांच उपकरण की अनुमति देता है। उदाहरण के लिए, "खतरे की रोशनी की स्थिति।" -
CarPropertyManager
(जावा घटकों के लिए) या वाहन नेटवर्क सेवा API (मूल के लिए) के माध्यम से पहुंच। अन्य कार एपीआई को संशोधित न करें क्योंकि ऐसा करने से भविष्य में संगतता समस्याएं हो सकती हैं। - विक्रेता गुणों को लागू करने के बाद, विक्रेता गुणों के लिए
VehicleVendorPermission
enum में केवल अनुमति सूची का चयन करें। सिस्टम गुणों के लिए विक्रेता अनुमतियों को मैप करना सीटीएस और वीटीएस को तोड़ देगा।
एचवीएसी गुणों को संभालना
आप एचवीएसी से संबंधित गुणों को सेट करके एचवीएसी को नियंत्रित करने के लिए वीएचएएल का उपयोग कर सकते हैं। अधिकांश एचवीएसी गुण ज़ोन किए गए गुण हैं, हालांकि कई गैर-क्षेत्रीय (वैश्विक) गुण हैं। नमूना परिभाषित गुणों में शामिल हैं:
संपत्ति | उद्देश्य |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | प्रति क्षेत्र तापमान निर्धारित करें। |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | प्रति क्षेत्र नियंत्रण पुनरावर्तन। |
HVAC संपत्तियों की पूरी सूची देखने के लिए, type.hal में types.hal
VEHICLE_PROPERTY_HVAC_*
खोजें। जब HVAC प्रॉपर्टी VehicleAreaSeat
का उपयोग करती है, तो ज़ोन किए गए HVAC प्रॉपर्टी को एरिया आईडी में मैप करने के लिए अतिरिक्त नियम लागू होते हैं। कार में प्रत्येक उपलब्ध सीट क्षेत्र आईडी सरणी में एक क्षेत्र आईडी का हिस्सा होना चाहिए।
उदाहरण एक। एक कार में दो आगे की सीटें ( 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
में)।
वाहन मानचित्र सेवा
व्हीकल मैप सर्विस (VMS) आम वाहन सुविधाओं, जैसे एडवांस्ड ड्राइवर असिस्टेंस सिस्टम्स (ADAS) का समर्थन करने के लिए पब/सब इंटरफेस के माध्यम से ग्राहकों के बीच मैप डेटा का आदान-प्रदान करने के लिए एक तंत्र प्रदान करता है। ग्राहक वीएचएएल या विशेषाधिकार प्राप्त एंड्रॉइड एप्लिकेशन में वीएमएस संपत्ति के माध्यम से इंटरफेसिंग वाहन सिस्टम शामिल कर सकते हैं। वीएमएस पर साझा किए गए डेटा का उद्देश्य वाहन प्रणालियों और सहायक ऐप्स द्वारा उपयोग के लिए मानचित्र डेटा तक सीमित होना है।
VMS केवल Android Automotive कार्यान्वयन में उपयोग के लिए अभिप्रेत है; AOSP में डिफ़ॉल्ट क्लाइंट नहीं होते हैं जो VMS को प्रकाशित या सब्सक्राइब करते हैं। VHAL में VMS गुण के लिए, संदेश प्रकार और डेटा संरचना VHAL 2.0 में VmsMessageType
enum में वर्णित है, जो समर्थित VMS संदेशों के प्रकारों को सूचीबद्ध करता है। इस एनम का उपयोग वाहन संपत्ति पूर्णांक सरणी में पहले पूर्णांक के रूप में किया जाता है और यह निर्धारित करता है कि शेष संदेश कैसे डिकोड किया जाता है।