वेहिकल हार्डवेयर एब्स्ट्रक्शन लेयर (वीएचएएल) इंटरफ़ेस उन गुणों को परिभाषित करता है जिन्हें ओईएम लागू कर सकते हैं और इसमें संपत्ति मेटाडेटा शामिल है (उदाहरण के लिए, क्या संपत्ति एक इंट है और कौन से परिवर्तन मोड की अनुमति है)। 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);
वीएचएएल निम्नलिखित कॉलबैक इंटरफेस का उपयोग करता है:
-
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 एनम का उपयोग करता है। |
MIRROR | दर्पण पर आधारित क्षेत्र, VehicleAreaMirror एनम का उपयोग करता है। |
SEAT | सीटों के आधार पर क्षेत्र, VehicleAreaSeat एनम का उपयोग करता है। |
DOOR | दरवाजों पर आधारित क्षेत्र, VehicleAreaDoor एनम का उपयोग करता है। |
WHEEL | पहियों पर आधारित क्षेत्र, VehicleAreaWheel एनम का उपयोग करता है। |
प्रत्येक ज़ोन वाली संपत्ति को पूर्व-निर्धारित क्षेत्र प्रकार का उपयोग करना चाहिए। प्रत्येक क्षेत्र प्रकार में क्षेत्र प्रकार के लिए एनम में परिभाषित बिट फ़्लैग्स का एक सेट होता है। उदाहरण के लिए, 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 | संपत्ति आईडी, इंट |
ज़ोन संपत्तियों को संभालना
एक ज़ोन वाली संपत्ति कई संपत्तियों के संग्रह के बराबर होती है जहां प्रत्येक उप-संपत्ति को निर्दिष्ट क्षेत्र आईडी मान के साथ एक्सेस किया जा सकता है।
- क्षेत्रबद्ध संपत्ति के लिए कॉल
get
हमेशा अनुरोध में एरिया आईडी शामिल करें। इसलिए, अनुरोधित क्षेत्र आईडी के लिए केवल वर्तमान मान लौटाया जाता है। यदि संपत्ति वैश्विक है, तो एरिया आईडी 0 है। - ज़ोनड प्रॉपर्टी के लिए
set
कॉल में हमेशा अनुरोध में एरिया आईडी शामिल होती है। इसलिए, केवल अनुरोधित क्षेत्र आईडी बदली जाती है। -
subscribe
कॉल संपत्ति के लिए सभी एरिया आईडी के लिए ईवेंट उत्पन्न करता है।
कॉल प्राप्त करें
आरंभीकरण के दौरान, संपत्ति का मूल्य अभी तक उपलब्ध नहीं हो सकता है क्योंकि मिलान करने वाला वाहन नेटवर्क संदेश अभी तक प्राप्त नहीं हुआ है। ऐसे मामलों में, कॉल get
-EAGAIN
वापस आ जाना चाहिए। कुछ संपत्तियों (जैसे एचवीएसी) में बिजली की अलग-अलग संपत्ति होती है। ऐसी संपत्ति के लिए कॉल get
(जब संचालित हो) एक त्रुटि वापस करने के बजाय एक UNAVAILABLE
स्थिति वापस करनी चाहिए। उदाहरण के लिए, एचवीएसी तापमान प्राप्त करें
चित्रा 1 । एचवीएसी तापमान प्राप्त करें (सीएस = कार सेवा, वीएचएएल = वाहन एचएएल)
कॉल सेट करें
एक विशिष्ट ऑपरेशन में, एक set
कॉल पूरे वाहन नेटवर्क में परिवर्तन अनुरोध करने की ओर ले जाती है। एक set
कॉल आदर्श रूप से एक एसिंक्रोनस ऑपरेशन है जो जितनी जल्दी हो सके लौटता है, लेकिन यह सिंक्रोनस भी हो सकता है। कुछ set
कॉल्स को तैयार होने के लिए प्रारंभिक डेटा की आवश्यकता हो सकती है लेकिन प्रारंभ के दौरान, ऐसा डेटा अभी तक उपलब्ध नहीं हो सकता है। ऐसे मामलों में, set
कॉल को StatusCode#TRY_AGAIN
वापस करना चाहिए। अलग पावर ऑन और ऑफ वाली कुछ संपत्तियों को StatusCode#NOT_AVAILABLE
या StatusCode#NOT_AVAILABLE_DISABLED
वापस करना चाहिए जब संपत्ति बंद हो और set
नहीं किया जा सकता। जब तक set
प्रभावी नहीं बनाया जाता है, get
जरूरी नहीं है कि सेट के समान मूल्य वापस आ जाए। उदाहरण के लिए, set HVAC Temperature
।
चित्रा 2 । एचवीएसी तापमान सेट करें (सीएस = कारसेवा, वीएचएएल = वाहन एचएएल)
कस्टम गुणों को संभालना
पार्टनर-विशिष्ट आवश्यकताओं का समर्थन करने के लिए, VHAL उन कस्टम गुणों की अनुमति देता है जो सिस्टम ऐप्स तक सीमित हैं। कस्टम गुणों के साथ कार्य करते समय निम्न दिशानिर्देशों का उपयोग करें:
- निम्नलिखित क्षेत्रों का उपयोग करके संपत्ति आईडी उत्पन्न की जानी चाहिए:
-
VehiclePropertyGroup:VENDOR
VENDOR
समूह का उपयोग केवल कस्टम गुणों के लिए किया जाता है। -
VehicleArea
उपयुक्त क्षेत्र प्रकार का चयन करें। -
VehiclePropertyType
उचित डेटा प्रकार का चयन करें।BYTES
प्रकार कच्चे डेटा को पास करने की अनुमति देता है जो ज्यादातर मामलों में पर्याप्त होता है। कस्टम गुणों के माध्यम से बार-बार बड़ा डेटा भेजना संपूर्ण वाहन नेटवर्क एक्सेस को धीमा कर सकता है - बड़ा पेलोड जोड़ते समय सावधान रहें। -
Property ID
कस्टम प्रॉपर्टी के लिए चार निबल आईडी चुनें।
-
- पारिस्थितिक तंत्र के विखंडन को रोकने के लिए, कस्टम गुणों का उपयोग उन वाहन गुणों को दोहराने के लिए नहीं किया जाना चाहिए जो पहले से मौजूद हैं ( VehiclePropertyIds SDK)।
- कस्टम प्रॉपर्टी के संक्षिप्त विवरण के साथ
VehiclePropConfig.configString
भरें। यह पवित्रता जाँच उपकरणों को मौजूदा वाहन संपत्तियों की आकस्मिक प्रतिकृति को फ़्लैग करने की अनुमति देता है। उदाहरण के लिए, "खतरा प्रकाश स्थिति।" -
CarPropertyManager
(Java घटकों के लिए) या Vehicle Network Service API (नेटिव के लिए) के माध्यम से एक्सेस करें। अन्य कार एपीआई को संशोधित न करें क्योंकि ऐसा करने से भविष्य में अनुकूलता संबंधी समस्याएं हो सकती हैं। - विक्रेता संपत्तियों को लागू करने के बाद, विक्रेता संपत्तियों के लिए
VehicleVendorPermission
एनम में केवल अनुमतियों की सूची का चयन करें। सिस्टम गुण के लिए विक्रेता अनुमतियाँ मैप करना CTS और VTS को तोड़ देगा।
एचवीएसी गुणों को संभालना
आप एचवीएसी से संबंधित गुणों को सेट करके एचवीएसी को नियंत्रित करने के लिए वीएचएएल का उपयोग कर सकते हैं। अधिकांश एचवीएसी गुण ज़ोन गुण हैं, हालांकि कई गैर-ज़ोन (वैश्विक) गुण हैं। नमूना परिभाषित गुणों में शामिल हैं:
संपत्ति | उद्देश्य |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | तापमान प्रति जोन निर्धारित करें। |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | नियंत्रण प्रति जोन नियंत्रण। |
HVAC संपत्तियों की पूरी सूची देखने के लिए, VEHICLE_PROPERTY_HVAC_*
को types.hal
में खोजें। जब 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
में)।
वाहन मानचित्र सेवा
वेहिकल मैप सर्विस (वीएमएस) एडवांस्ड ड्राइवर असिस्टेंस सिस्टम्स (एडीएएस) जैसी सामान्य वाहन सुविधाओं का समर्थन करने के लिए पब/उप इंटरफेस के माध्यम से ग्राहकों के बीच मैप डेटा का आदान-प्रदान करने के लिए एक तंत्र प्रदान करता है। ग्राहक VHAL या विशेषाधिकार प्राप्त Android अनुप्रयोगों में VMS संपत्ति के माध्यम से इंटरफेस करने वाले वाहन सिस्टम को शामिल कर सकते हैं। वीएमएस पर साझा किए गए डेटा का उद्देश्य वाहन प्रणालियों और सहायक ऐप्स द्वारा उपयोग के लिए मानचित्र डेटा तक सीमित होना है।
वीएमएस केवल एंड्रॉइड ऑटोमोटिव कार्यान्वयन में उपयोग के लिए अभिप्रेत है; AOSP में डिफ़ॉल्ट क्लाइंट नहीं होते हैं जो VMS को प्रकाशित या सब्सक्राइब करते हैं। VHAL में VMS गुण के लिए, संदेश प्रकार और डेटा संरचना VHAL 2.0 में VmsMessageType
एनम में वर्णित हैं, जो समर्थित VMS संदेशों के प्रकारों को सूचीबद्ध करता है। इस एनम का उपयोग वाहन संपत्ति पूर्णांक सरणी में पहले पूर्णांक के रूप में किया जाता है और यह निर्धारित करता है कि शेष संदेश कैसे डिकोड किया गया है।