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

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

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

  • हमेशा सिस्टम प्रॉपर्टी का इस्तेमाल करने की कोशिश करें. अगर कोई भी सिस्टम प्रॉपर्टी आपकी ज़रूरत के मुताबिक नहीं है, तो वेंडर प्रॉपर्टी का इस्तेमाल आखिरी विकल्प के तौर पर किया जाना चाहिए.
  • इकोसिस्टम के फ़्रैगमेंटेशन को रोकने के लिए, वेंडर प्रॉपर्टी का इस्तेमाल उन वाहन प्रॉपर्टी को दोहराने के लिए नहीं किया जाना चाहिए जो एसडीके VehiclePropertyIds में पहले से मौजूद हैं. ज़्यादा जानने के लिए, सीडीडी में सेक्शन 2.5, वाहन से जुड़ी ज़रूरी शर्तें देखें.
  • प्रॉपर्टी आईडी जनरेट करने के लिए, इन फ़ील्ड का इस्तेमाल करें:
    • VehiclePropertyGroup: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 में मौजूद एक 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 की सुविधा वाली कार की प्रॉपर्टी देखें.

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

SEAT और STEERING_WHEEL प्रॉपर्टी देखें.

एचवीएसी

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

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

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

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

उदाहरण 1

किसी कार में दो सीटें आगे की ओर (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

उदाहरण 2

किसी कार में तीन सीट होती हैं. पहली सीट में दो सीटें होती हैं (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

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

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

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

वाहन की प्रॉपर्टी VHAL फ़ील्ड ब्यौरा
ऊंचाई 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 के मुताबिक काम करना ज़रूरी नहीं है
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 अनुमति ज़रूरी है.