वेंडर प्रॉपर्टी
पार्टनर की ज़रूरतों को पूरा करने के लिए, VHAL में वेंडर प्रॉपर्टी को अनुमति दी जाती है. इन्हें सिर्फ़ सिस्टम एपीआई के ज़रिए ऐक्सेस किया जाता है. वेंडर प्रॉपर्टी के साथ काम करते समय, इन दिशा-निर्देशों का पालन करें:
- हमेशा सिस्टम प्रॉपर्टी का इस्तेमाल करने की कोशिश करें. अगर कोई भी सिस्टम प्रॉपर्टी आपकी ज़रूरत के मुताबिक नहीं है, तो वेंडर प्रॉपर्टी का इस्तेमाल करें.
- वाहन की उन प्रॉपर्टी को डुप्लीकेट करने के लिए, वेंडर प्रॉपर्टी का इस्तेमाल नहीं किया जाना चाहिए जो एसडीके VehiclePropertyIds में पहले से मौजूद हैं. ऐसा करने से, वाहन की प्रॉपर्टी के लिए अलग-अलग सिस्टम बन सकते हैं. ज़्यादा जानने के लिए, सीडीडी में सेक्शन 2.5, वाहन से जुड़ी ज़रूरी शर्तें देखें.
- प्रॉपर्टी आईडी जनरेट करने के लिए, इन फ़ील्ड का इस्तेमाल करें:
VehiclePropertyGroup:VENDOR
VENDOR ग्रुप का इस्तेमाल सिर्फ़ वेंडर प्रॉपर्टी के लिए किया जाता है.VehicleArea
अपने हिसाब से एरिया टाइप चुनें.VehiclePropertyType
सही डेटा टाइप चुनें. BYTES प्रकार की मदद से, रॉ डेटा पास किया जाता है, जो ज़्यादातर मामलों में काफ़ी होता है. वेंडर प्रॉपर्टी के ज़रिए अक्सर बड़ा डेटा भेजने से, वाहन के पूरे नेटवर्क का ऐक्सेस धीमा हो सकता है. बड़ा पेलोड जोड़ते समय सावधानी बरतें.Property ID
वेंडर प्रॉपर्टी के लिए, दो बाइट वाला यूनीक आईडी चुनें. उदाहरण के लिए, 0x1234.
- वेंडर प्रॉपर्टी के बारे में कम शब्दों में जानकारी के साथ,
VehiclePropConfig.configString
भरें. इससे, पुष्टि करने वाले टूल, वाहन की मौजूदा प्रॉपर्टी के अनजाने में डुप्लीकेट बनने की जानकारी दे सकते हैं. उदाहरण के लिए, "XYZ के लिए मेरी कस्टम प्रॉपर्टी." - CarpropertyManager
(Java कॉम्पोनेंट के लिए) या
libvhalclient
(नेटिव के लिए) के ज़रिए ऐक्सेस करें. अन्य कार के एपीआई में बदलाव न करें. ऐसा करने से, आने वाले समय में कार के साथ काम करने से जुड़ी समस्याएं आ सकती हैं.
वेंडर प्रॉपर्टी के लिए अनुमति
तय की गई किसी भी वेंडर प्रॉपर्टी के लिए, डिफ़ॉल्ट अनुमति android.car.Car.PERMISSION_VENDOR_EXTENSION
होती है. अनुमति को बेहतर तरीके से कंट्रोल करने के लिए, SUPPORT_CUSTOMIZE_VENDOR_PERMISSION
प्रॉपर्टी का इस्तेमाल करें. यह STATIC
प्रॉपर्टी रीड-ओनली होती है. इसके कॉन्फ़िगरेशन कलेक्शन में, वेंडर प्रॉपर्टी के लिए अनुमतियां तय की जाती हैं.
configArray
को इस तरह सेट किया जाता है (i एक पूर्णांक है, जो 0 से शुरू होता है):
configArray[3 * i]
propId, वेंडर प्रॉपर्टी का प्रॉपर्टी आईडी है.configArray[3 * i + 1]
VehicleVendorPermission.aidl
में एक क्रम, जिससे प्रॉपर्टी की वैल्यू पढ़ने की अनुमति का पता चलता है.configArray[3 * i + 2]
VehicleVendorPermission.aidl
में मौजूद एक वैल्यू, जिससे प्रॉपर्टी की वैल्यू लिखने की अनुमति का पता चलता है.
उदाहरण के लिए, नीचे दिया गया कॉन्फ़िगरेशन कलेक्शन, अनुमतियां पाने के लिए दो वेंडर प्रॉपर्टी, vendor_prop_1
और vendor_prop_2
को कॉन्फ़िगर करता है:
vendor_prop_1
को पढ़ने के लिएandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT
और लिखने के लिएandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
की अनुमति चाहिए.vendor_prop-2
को पढ़ने के लिए,android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO
की ज़रूरत होती है और Android ऐप्लिकेशन के लिए, इसमें बदलाव नहीं किया जा सकता.
configArray = { PERMISSION_SET_VENDOR_CATEGORY_SEAT vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE }
वेंडर प्रॉपर्टी इस कलेक्शन में नहीं हैं, इसलिए डिफ़ॉल्ट वेंडर अनुमति लें. PERMISSION_NOT_ACCESSIBLE
चुनने पर, Android ऐप्लिकेशन प्रॉपर्टी को ऐक्सेस नहीं कर सकते.
उदाहरण में, Android ऐप्लिकेशन vendor_prop_2
के लिए कोई वैल्यू नहीं लिख सकते. सिर्फ़ नेटिव
VHAL क्लाइंट ही इस प्रॉपर्टी में डेटा डाल सकते हैं.
ड्राइवर की सुरक्षा में मदद करने वाले ऐडवांस सिस्टम (एडीएएस)
ADAS वाहन की प्रॉपर्टी देखें.सीट और स्टीयरिंग
सीट और स्टीयरिंग व्हील की प्रॉपर्टी देखें.
एचवीएसी
एचवीएस से जुड़ी प्रॉपर्टी सेट करके, VHAL का इस्तेमाल एचवीएस को कंट्रोल करने के लिए किया जा सकता है. ज़्यादातर एचवीएस प्रॉपर्टी, वाहन के कुछ खास हिस्सों से जुड़ी होती हैं. हालांकि, कई प्रॉपर्टी ग्लोबल प्रॉपर्टी होती हैं. सैंपल के तौर पर तय की गई प्रॉपर्टी में ये शामिल हैं:
प्रॉपर्टी | मकसद |
---|---|
HVAC_TEMPERATURE_SET |
हर एरिया आईडी के लिए तापमान सेट करें. |
HVAC_POWER_ON |
हर क्षेत्र के आईडी के हिसाब से, एचवीएसी सिस्टम की पावर की स्थिति. |
एचवीएसी सिस्टम की पावर स्टेटस पर निर्भर एचवीएसी प्रॉपर्टी के लिए, उन्हें HVAC_POWER_ON
कॉन्फ़िगरेशन कलेक्शन में शामिल करना ज़रूरी है. एचवीएसी प्रॉपर्टी की पूरी सूची देखने के लिए,
VehicleProperty.aidl
में HVAC_*
खोजें. इसके बाद, काम करने वाले सिस्टम की प्रॉपर्टी देखें.
प्रॉपर्टी.
नॉन-ग्लोबल VehicleArea टाइप की एचवीएसी प्रॉपर्टी को AreaIDs पर मैप करने के नियम:
प्रॉपर्टी से जिन VehicleArea
टाइप पर असर पड़ता है उनके हर “क्षेत्र” को, उस प्रॉपर्टी के लिए क्षेत्र आईडी में शामिल करना ज़रूरी है. तापमान कंट्रोल करने वाले डिवाइसों को उन सीटों के लिए असाइन किया जाता है जिन पर उनका "सबसे ज़्यादा असर" पड़ता है. हालांकि, जिन सीटों पर असर पड़ता है उन्हें सिर्फ़ एक बार शामिल किया जाना चाहिए.
पीछे की बीच वाली सीट को बाईं या दाईं ओर के एरिया आईडी में असाइन करना, मनमुताबिक लग सकता है. हालांकि, असर वाली हर सीट को सिर्फ़ एक एरिया आईडी में शामिल करने से यह पक्का होता है कि कार की सभी सीटें दिख रही हैं और हर सीट पर असर डालने का सही तरीका उपलब्ध है.
पहला उदाहरण
कार में दो आगे की सीटें (ROW_1_LEFT, ROW_1_RIGHT) और तीन पीछे की सीटें
(ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) हैं. तापमान कंट्रोल करने वाली दो यूनिट हैं. एक ड्राइवर की तरफ़ और एक पैसेंजर की तरफ़. HVAC_TEMPERATURE_SET
के लिए, AreaIDs का मान्य मैपिंग सेट, दो एलिमेंट वाला कलेक्शन होगा:
- ROW_1_LEFT | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
समान हार्डवेयर कॉन्फ़िगरेशन के लिए वैकल्पिक मैपिंग यह होगी:
- ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
- 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
को AreaIDs पर मैप करने का एक सही तरीका, तीन एलिमेंट वाला कलेक्शन है:
- ROW_1_LEFT
- ROW_1_RIGHT
- ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
तीसरा उदाहरण
कार में दो आगे की सीटें (ROW_1_LEFT, ROW_1_RIGHT) और तीन पीछे की सीटें (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) हैं. मान लीजिए कि कार में सिर्फ़ सामने की दो सीट के लिए, एचवीएसी_ऑटो_ऑन की सुविधा काम करती है. HVAC_AUTO_ON के लिए, AreaIDs का मान्य मैपिंग सेट एक एलिमेंट वाला ऐरे होगा:
- ROW_1_LEFT | ROW_1_RIGHT
अगर HVAC_AUTO_ON
में ड्राइवर साइड और पैसेंजर साइड के लिए दो अलग-अलग कंट्रोल यूनिट हैं, तो वैकल्पिक मैपिंग दो एलिमेंट के कलेक्शन के तौर पर होगी:
- ROW_1_LEFT
- ROW_1_RIGHT
INFO_EXTERIOR_DIMENSIONS
वाहन के बाहरी डाइमेंशन को मिलीमीटर में मापा गया है, जैसा कि पहली इमेज में दिखाया गया है.
वाहन के बाहरी हिस्से के डाइमेंशन तय करने के लिए, इस टेबल में बताई गई प्रॉपर्टी का इस्तेमाल करें.
वाहन की प्रॉपर्टी | VHAL फ़ील्ड | ब्यौरा |
---|---|---|
लंबाई | int32Values[0] |
जमीन और वाहन के सबसे ऊंचे हिस्से के बीच की वर्टिकल दूरी. यह मानकर चला गया है कि फ़ैक्ट्री में लगे पहिये सामान्य रूप से फ़ुल किए गए हैं. |
लंबाई | int32Values[1] |
वाहन के सामने और पीछे के सबसे बाहरी हिस्सों के बीच की हॉरिज़ॉन्टल दूरी. |
चौड़ाई, मिरर को छोड़कर | int32Values[2] |
वाहन की दोनों तरफ़ सबसे बाहरी दो पॉइंट के बीच की हॉरिज़ॉन्टल दूरी. इसमें साइड मिरर शामिल नहीं हैं. |
चौड़ाई, जिसमें मिरर भी शामिल हैं | int32Values[3] |
वाहन की हर तरफ़ मौजूद सबसे बाहरी दो पॉइंट के बीच की हॉरिज़ॉन्टल दूरी. इसमें साइड मिरर भी शामिल हैं. |
व्हील बेस | int32Values[4] |
वाहन के सामने और पीछे के पहियों के बीच की दूरी. |
ट्रैक की चौड़ाई, आगे की ओर | int32Values[5] |
सामने के पहिये के बीच की दूरी, जिसे एक टायर के ट्रेड की सेंटर लाइन से दूसरे टायर के ट्रेड की सेंटर लाइन तक मापा जाता है. |
पीछे के टायर की चौड़ाई | int32Values[6] |
एक टायर की बीच की लाइन से दूसरी टायर की ट्रेड की बीच वाली लाइन से, कार के पीछे के व्हील के बीच की दूरी को मापा जाता है. |
कर्ब-टू-कर्ब डाइमीटर | int32Values[7] |
पूरी तरह से लॉक स्टीयरिंग व्हील से पूरा मोड़ बनाते समय, वाहन के बाहरी पहिए से बने सर्कल का व्यास. |
यूरोपीय संघ के सामान्य सुरक्षा कानून का पालन
अगर गाड़ी को Android की मदद से, यूरोपियन यूनियन के जनरल सेफ़्टी रेगुलेशन (GSR) की ज़रूरी शर्तों का पालन करना है, तो प्रॉपर्टी GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
के साथ काम करने की सुविधा होनी चाहिए. इस्तेमाल के उदाहरण के तौर पर, ईयू रेगुलेशन 2019/2144 में बताए गए GSR-ISA (इंटेलिजेंट स्पीड असिस्ट) को शामिल किया जा सकता है. यह प्रॉपर्टी, Android 13 से AIDL VHAL में जोड़ी गई है. हालांकि, यह Android 12 के रिलीज़ होने के बाद से, Car Service में काम करती है. इस प्रॉपर्टी को सिर्फ़ पढ़ने के लिए उपलब्ध,
स्टैटिक ग्लोबल इंटिजर प्रॉपर्टी के तौर पर परिभाषित किया गया है. इसकी संभावित वैल्यू,
GsrComplianceRequirementType
एनम से तय की जाती हैं:
नाम | वैल्यू | ब्यौरा |
---|---|---|
GSR_COMPLIANCE_NOT_REQUIRED |
0 | जीएसआर का पालन करना ज़रूरी नहीं है |
GSR_COMPLIANCE_REQUIRED_V1 |
1 | जीएसआर का पालन करना ज़रूरी है और ज़रूरी शर्तों के समाधान का वर्शन 1 होना चाहिए. |
Android 12 में HIDL VHAL में इस प्रॉपर्टी का इस्तेमाल करने के लिए, वेंडर को प्रॉपर्टी आईडी को हार्ड-कोड करना होगा.
उदाहरण के लिए, यहां दिए गए स्निपेट में दिखाया गया है कि रेफ़रंस HIDL
VHAL
DefaultConfig.h
में यह सुविधा कैसे काम करती है:
{ .config = { // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT .prop = 0x11400F47, .access = VehiclePropertyAccess::READ, .changeMode = VehiclePropertyChangeMode::STATIC, }, // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1 .initialValue = {.int32Values = {1}}, }
Android 13 से, AIDL VHAL में इस प्रॉपर्टी का इस्तेमाल करने के लिए, वेंडर VehicleProperty.h
से प्रॉपर्टी आईडी और GsrComplianceRequirementType.h
से एनम का इस्तेमाल कर सकते हैं. उदाहरण के लिए, रेफ़रंस के तौर पर दिए गए AIDL VHAL DefaultProperties.json
में:
{ "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT", "defaultValue": { "int32Values": [ "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1" ] } }
Android ऐप्लिकेशन से इस प्रॉपर्टी को पढ़ने के लिए, CarPropertyManager.getIntProperty
का इस्तेमाल करें.
- Android 13 और उसके बाद के वर्शन में, प्रॉपर्टी आईडी के तौर पर
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE
का इस्तेमाल करें. - Android 12 में, प्रॉपर्टी आईडी के तौर पर 0x11400F47 की हार्ड कोड की गई वैल्यू का इस्तेमाल करें. इस
प्रॉपर्टी के लिए,
Car#PERMISSION_CAR_INFO
की अनुमति ज़रूरी है.