खास प्रॉपर्टी

वेंडर की प्रॉपर्टी

पार्टनर की ज़रूरतों को पूरा करने के लिए, वीएचएएल, वेंडर प्रॉपर्टी की अनुमति देता है. इन्हें सिर्फ़ सिस्टम एपीआई के ज़रिए ऐक्सेस किया जाता है. वेंडर प्रॉपर्टी का इस्तेमाल करते समय, इन दिशा-निर्देशों का पालन करें:

  • हमेशा सिस्टम प्रॉपर्टी का इस्तेमाल करने की कोशिश करें. अगर कोई भी सिस्टम प्रॉपर्टी आपकी ज़रूरत के मुताबिक नहीं है, तो वेंडर प्रॉपर्टी का इस्तेमाल आखिरी विकल्प के तौर पर किया जाना चाहिए.
  • इकोसिस्टम के फ़्रैगमेंटेशन को रोकने के लिए, वेंडर प्रॉपर्टी का इस्तेमाल, वाहन की उन प्रॉपर्टी को दोहराने के लिए नहीं किया जाना चाहिए जो एसडीके के VehiclePropertyIds में पहले से मौजूद हैं. ज़्यादा जानने के लिए, CDD में सेक्शन 2.5, वाहन से जुड़ी ज़रूरी शर्तें देखें.
  • प्रॉपर्टी आईडी जनरेट करने के लिए, इन फ़ील्ड का इस्तेमाल करें:
    • VehiclePropertyGroup:VENDOR VENDOR ग्रुप का इस्तेमाल सिर्फ़ वेंडर प्रॉपर्टी के लिए किया जाता है.
    • VehicleArea क्षेत्र का सही टाइप चुनें.
    • VehiclePropertyType सही डेटा टाइप चुनें. BYTES टाइप से रॉ डेटा पास किया जा सकता है. यह ज़्यादातर मामलों में काफ़ी होता है. वेंडर प्रॉपर्टी के ज़रिए बार-बार बड़ा डेटा भेजने से, वाहन के पूरे नेटवर्क की ऐक्सेस स्पीड कम हो सकती है. बड़ा पेलोड जोड़ते समय सावधानी बरतें.
    • Property ID वेंडर प्रॉपर्टी के लिए, दो बाइट वाला कोई यूनीक आईडी चुनें. उदाहरण के लिए, 0x1234.
  • VehiclePropConfig.configString में वेंडर प्रॉपर्टी के बारे में कम शब्दों में जानकारी दें. इससे, पुष्टि करने वाले टूल को मौजूदा वाहन की प्रॉपर्टी की गलती से हुई नकल के बारे में सूचना मिल सकती है. उदाहरण के लिए, "XYZ के लिए मेरी कस्टम प्रॉपर्टी."
  • इन्हें ऐक्सेस करने के लिए, Java कॉम्पोनेंट के लिए CarPropertyManager या नेटिव के लिए 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 में मौजूद एक enum, जो प्रॉपर्टी की वैल्यू को पढ़ने की अनुमति के बारे में बताता है.
  • configArray[3 * i + 2] VehicleVendorPermission.aidl में एक enum, जो प्रॉपर्टी की वैल्यू लिखने की अनुमति दिखाता है.

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

ड्राइवर की सुरक्षा में मदद करने वाले बेहतर सिस्टम (एडीएएस)

ADAS की सुविधा वाली कार की प्रॉपर्टी देखें.

सीट और स्टीयरिंग

सीट और स्टीयरिंग व्हील की प्रॉपर्टी देखें.

एचवीएसी

एचवीएसी से जुड़ी प्रॉपर्टी सेट करके, एचवीएसी को कंट्रोल करने के लिए वीएचएएल का इस्तेमाल किया जा सकता है. ज़्यादातर एचवीएसी प्रॉपर्टी, वाहन के कुछ खास हिस्सों से जुड़ी होती हैं. हालांकि, इनमें से कई ग्लोबल प्रॉपर्टी होती हैं. डिफ़ाइन की गई प्रॉपर्टी के उदाहरणों में ये शामिल हैं:

प्रॉपर्टी मकसद
HVAC_TEMPERATURE_SET हर इलाके के आईडी के हिसाब से तापमान सेट करें.
HVAC_POWER_ON हर क्षेत्र के आईडी के हिसाब से, एचवीएसी सिस्टम की पावर की स्थिति.

एचवीएसी सिस्टम की पावर की स्थिति पर निर्भर रहने वाली एचवीएसी प्रॉपर्टी को HVAC_POWER_ON कॉन्फ़िगरेशन ऐरे में शामिल किया जाना चाहिए. एचवीएसी प्रॉपर्टी की पूरी सूची देखने के लिए, HVAC_* में VehicleProperty.aidl खोजें. इसके अलावा, सिस्टम की काम करने वाली प्रॉपर्टी देखें. प्रॉपर्टी के बारे में ज़्यादा जानें.

एचवीएसी प्रॉपर्टी के नॉन-ग्लोबल VehicleArea टाइप को AreaID पर मैप करने के नियम: किसी खास VehicleArea टाइप के लिए, प्रॉपर्टी से प्रभावित होने वाले हर “area” को उस प्रॉपर्टी के लिए AreaID में शामिल किया जाना चाहिए. तापमान कंट्रोल करने वाले बटन, उन सीटों को असाइन किए जाते हैं जिन पर उनका "सबसे ज़्यादा असर" होता है. हालांकि, हर प्रभावित सीट को सिर्फ़ एक बार शामिल किया जाना चाहिए. ऐसा लग सकता है कि सेंटर वाली पिछली सीट को बाईं या दाईं ओर के AreaID में असाइन करना मनमानी है. हालांकि, हर सीट को सिर्फ़ एक AreaID में शामिल करने से यह पक्का होता है कि कार की सभी सीटों को शामिल किया गया है. साथ ही, हर सीट को प्रभावित करने का सही तरीका उपलब्ध है.

पहला उदाहरण

किसी कार में दो सीटें आगे की ओर (ROW_1_LEFT, ROW_1_RIGHT) और तीन सीटें पीछे की ओर (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) होती हैं. इसमें तापमान कंट्रोल करने वाली दो यूनिट हैं. एक ड्राइवर की तरफ़ और दूसरी यात्री की तरफ़. HVAC_TEMPERATURE_SET के लिए, AreaID का मान्य मैपिंग सेट दो एलिमेंट वाला ऐरे होगा:

  • 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 को AreaID से मैप करने का सही तरीका, तीन एलिमेंट वाला ऐरे है:

  • 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 की सुविधा उपलब्ध है. HVAC_AUTO_ON के लिए, AreaID का मान्य मैपिंग सेट एक एलिमेंट ऐरे होगा:

  • ROW_1_LEFT | ROW_1_RIGHT

अगर HVAC_AUTO_ON में ड्राइवर और पैसेंजर की सीट के लिए दो अलग-अलग कंट्रोल यूनिट हैं, तो दो एलिमेंट वाला एक ऐरे, वैकल्पिक मैपिंग होगा:

  • ROW_1_LEFT
  • ROW_1_RIGHT

INFO_EXTERIOR_DIMENSIONS

किसी वाहन के बाहरी डाइमेंशन को मिलीमीटर में मापा जाता है. इसे पहली इमेज में दिखाया गया है.

पहली इमेज. वाहन के बाहरी डाइमेंशन, सामने का व्यू.
दूसरी इमेज. वाहन के बाहरी हिस्से के डाइमेंशन, साइड व्यू.

इस टेबल में बताई गई प्रॉपर्टी का इस्तेमाल करके, किसी वाहन के बाहरी डाइमेंशन तय करें.

वाहन की प्रॉपर्टी वीएचएएल फ़ील्ड ब्यौरा
लंबाई int32Values[0] ज़मीन और वाहन के सबसे ऊंचे पॉइंट के बीच की वर्टिकल दूरी. यह मान लिया जाता है कि फ़ैक्ट्री में लगे टायर में हवा का दबाव सामान्य है.
लंबाई int32Values[1] वाहन के आगे और पीछे के सबसे बाहरी पॉइंट के बीच की हॉरिज़ॉन्टल दूरी.
चौड़ाई, इसमें मिरर शामिल नहीं हैं int32Values[2] वाहन के दोनों किनारों पर मौजूद सबसे बाहरी पॉइंट के बीच की हॉरिज़ॉन्टल दूरी. इसमें साइड मिरर शामिल नहीं हैं.
चौड़ाई, जिसमें मिरर शामिल हैं int32Values[3] वाहन के दोनों किनारों पर मौजूद सबसे बाहरी पॉइंट के बीच की हॉरिज़ॉन्टल दूरी. इसमें साइड मिरर भी शामिल हैं.
व्हील बेस int32Values[4] वाहन के सामने और पीछे वाले पहियों के बीच की दूरी.
ट्रैक की चौड़ाई, सामने से int32Values[5] सामने के पहियों के बीच की दूरी. इसे एक टायर के ट्रेड की सेंटर लाइन से लेकर दूसरे टायर के ट्रेड की सेंटर लाइन तक मापा जाता है.
ट्रैक की चौड़ाई, पीछे का हिस्सा int32Values[6] पीछे के पहियों के बीच की दूरी. इसे एक टायर के ट्रेड की सेंटर लाइन से दूसरे टायर के ट्रेड की सेंटर लाइन तक मापा जाता है.
कर्व-टू-कर्व टर्निंग डायमीटर int32Values[7] स्टीयरिंग व्हील को पूरी तरह से लॉक करके, गाड़ी को पूरा घुमाने पर उसके बाहरी पहियों से बने सर्कल का डाइमीटर.

यूरोपियन यूनियन के सामान्य सुरक्षा कानून का पालन करना

अगर वाहन को Android के ज़रिए, यूरोपियन यूनियन के जनरल सेफ़्टी रेगुलेशन (जीएसआर) की ज़रूरी शर्तों का पालन करना है, तो GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT प्रॉपर्टी काम करनी चाहिए. इस्तेमाल के उदाहरण के तौर पर, GSR-ISA (इंटेलिजेंट स्पीड असिस्ट) को लिया जा सकता है. इसे ईयू रेगुलेशन 2019/2144 में तय किया गया है. इस प्रॉपर्टी को Android 13 से AIDL VHAL में जोड़ा गया है. हालांकि, यह Android 12 की रिलीज़ के बाद से Car Service में काम करती है. इस प्रॉपर्टी को सिर्फ़ पढ़ने के लिए उपलब्ध स्टैटिक ग्लोबल पूर्णांक प्रॉपर्टी के तौर पर तय किया जाता है. इसकी संभावित वैल्यू, GsrComplianceRequirementType enum से तय होती हैं:

नाम वैल्यू ब्यौरा
GSR_COMPLIANCE_NOT_REQUIRED 0 जीएसआर के मुताबिक काम करना ज़रूरी नहीं है
GSR_COMPLIANCE_REQUIRED_V1 1 GSR का पालन करना ज़रूरी है और ज़रूरी समाधान का वर्शन 1 है.

Android 12 में, एचआईडीएल वीएचएएल में इस प्रॉपर्टी को सपोर्ट करने के लिए, वेंडर को प्रॉपर्टी आईडी को हार्ड-कोड करना होगा. उदाहरण के लिए, यहां दिए गए स्निपेट में दिखाया गया है कि रेफ़रंस 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 से एआईडीएल वीएचएएल में इस प्रॉपर्टी का इस्तेमाल करने के लिए, वेंडर VehicleProperty.h से प्रॉपर्टी आईडी और GsrComplianceRequirementType.h से enum का इस्तेमाल कर सकते हैं. उदाहरण के लिए, रेफ़रंस एआईडीएल वीएचएएल 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 अनुमति ज़रूरी है.