प्रॉपर्टी कॉन्फ़िगरेशन

हर प्रॉपर्टी को, VehiclePropConfig स्ट्रक्चर के ज़रिए तय किए गए प्रॉपर्टी कॉन्फ़िगरेशन से तय किया जाता है. इसमें ये फ़ील्ड होते हैं.

फ़ील्ड ब्यौरा
prop

प्रॉपर्टी आईडी. यह VehicleProperty.aidl में से तय की गई सिस्टम प्रॉपर्टी या वेंडर प्रॉपर्टी में से कोई एक होनी चाहिए. प्रॉपर्टी आईडी, नीचे दिए गए फ़ील्ड के बिट-ऑर का इस्तेमाल करके बनाया जाता है (दाईं से बाईं ओर):

  • (0x00000000) 16 बिट: यह 0x0100 से 0xffff की रेंज में मौजूद एक यूनीक आईडी होता है.
  • (0x00000000) 8 बिट: प्रॉपर्टी के टाइप, जो प्रॉपर्टी के टाइप के बारे में बताता है.
  • (0x00000000) 4 बिट: क्षेत्र के टाइप.
  • (0x00000000) 4 बिट: VehiclePropertyGroup यह SYSTEM (0x10000000) या VENDOR (0x20000000) में से कोई एक होता है. कस्टम की जा सकने वाली प्रॉपर्टी के लिए, वेंडर प्रॉपर्टी देखें.

उदाहरण के लिए,
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)

access
  • प्रॉपर्टी के लिए ऐक्सेस मोड. इसकी वैल्यू READ, WRITE या READ_WRITE में से कोई एक होनी चाहिए.
  • सिस्टम प्रॉपर्टी के लिए, यह VehicleProperty.aidl में बताए गए ऐक्सेस मोड में से कोई एक होना चाहिए.
  • जिन प्रॉपर्टी के लिए हर इलाके के हिसाब से ऐक्सेस दिया जाता है उनके लिए, यह हर इलाके के हिसाब से दिए गए ऐक्सेस का सबसे बड़ा सबसेट होता है. उदाहरण के लिए, अगर प्रॉपर्टी के दो इलाकों के लिए ऐक्सेस READ और READ_WRITE है, तो इसे READ पर सेट किया जाना चाहिए.
changeMode
  • प्रॉपर्टी के लिए मोड बदलें. इसकी वैल्यू STATIC, ON_CHANGE या CONTINUOUS में से कोई एक होनी चाहिए. STATIC का मतलब है कि सिस्टम बूट होने के बाद, प्रॉपर्टी की वैल्यू कभी नहीं बदलती. ON_CHANGE का मतलब है कि वैल्यू में बदलाव होने पर, वीएचएएल को इसकी सूचना देनी होगी. CONTINUOUS का मतलब है कि प्रॉपर्टी की वैल्यू लगातार बदलती रहती है. साथ ही, VHAL को सदस्यता के सैंपल रेट के आधार पर रिपोर्ट करना होगा.
  • सिस्टम प्रॉपर्टी के लिए, यह VehicleProperty.aidl में बताए गए बदलाव के मोड के बराबर होना चाहिए.
configArray यह एक वैकल्पिक कलेक्शन है, जिसमें प्रॉपर्टी के हिसाब से कॉन्फ़िगरेशन होता है. इसे खाली छोड़ा जा सकता है. कुछ सिस्टम प्रॉपर्टी के लिए, जैसे कि GEAR_SELECTION, कॉन्फ़िगरेशन ऐरे का खास मतलब होता है और इसे तय करना ज़रूरी है.
configString यह एक वैकल्पिक स्ट्रिंग है, जिसमें प्रॉपर्टी के हिसाब से कॉन्फ़िगरेशन होता है. इसे खाली छोड़ा जा सकता है.
minSampleRate और maxSampleRate लगातार प्रॉपर्टी के लिए, कम से कम और ज़्यादा से ज़्यादा सैंपल रेट (हर्ट्ज़ में). अगर प्रॉपर्टी लगातार नहीं है, तो इसका इस्तेमाल नहीं किया जाता. minSampleRate और maxSampleRate को VHAL लागू करने वाले सिस्टम से हासिल किया जाना चाहिए. यह ज़रूरी नहीं है कि कम से कम और ज़्यादा से ज़्यादा सैंपल रेट के बीच के सभी सैंपल रेट काम करें.

प्रॉपर्टी टाइप

VehiclePropertyType.aidl में इन्हें enum के तौर पर तय किया गया है. यहां दी गई टेबल में, इस्तेमाल की जा सकने वाली प्रॉपर्टी के टाइप दिए गए हैं.

प्रॉपर्टी किस तरह की है मान ब्यौरा
STRING 0x00100000 स्ट्रिंग प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में stringValue फ़ील्ड का इस्तेमाल करती है.
BOOLEAN 0x00200000 Boolean प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में मौजूद int32Values फ़ील्ड के पहले एलिमेंट का इस्तेमाल करती है. 0 का मतलब false है और None 0 का मतलब true है.
INT32 0x00400000 Integer प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में मौजूद int32Values फ़ील्ड के पहले एलिमेंट का इस्तेमाल करती है.
INT32_VEC 0x00410000 Integer[] प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में मौजूद int32Values फ़ील्ड के एलिमेंट का इस्तेमाल करती है.
INT64 0x00500000 लंबी प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में मौजूद int64Values फ़ील्ड में पहले एलिमेंट का इस्तेमाल करती है.
INT64_VEC 0x00510000 Long[] प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में मौजूद int64Values फ़ील्ड के एलिमेंट का इस्तेमाल करती है.
FLOAT 0x00600000 Float प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में मौजूद floatValues फ़ील्ड के पहले एलिमेंट का इस्तेमाल करती है.
FLOAT_VEC 0x00610000 Float[] प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में मौजूद floatValues फ़ील्ड के एलिमेंट का इस्तेमाल करती है.
BYTES 0x00700000 byte[] प्रॉपर्टी, वाहन की प्रॉपर्टी की वैल्यू में मौजूद byteValues फ़ील्ड के एलिमेंट का इस्तेमाल करती है.
MIXED 0x00e00000 अलग-अलग तरह की प्रॉपर्टी. स्केलर या वेक्टर टाइप का कोई भी कॉम्बिनेशन. प्रॉपर्टी कॉन्फ़िगरेशन में, कॉन्फ़िगरेशन ऐरे में सटीक फ़ॉर्मैट दिया जाना चाहिए.

वेंडर की MIXED टाइप की प्रॉपर्टी के लिए, configArray को इस स्ट्रक्चर में फ़ॉर्मैट किया जाना चाहिए:

  • configArray[0], 1 से पता चलता है कि प्रॉपर्टी की वैल्यू String है
  • configArray[1], 1 से पता चलता है कि प्रॉपर्टी की वैल्यू Boolean है
  • configArray[2], 1 से पता चलता है कि प्रॉपर्टी की वैल्यू Integer है
  • configArray[3], इस नंबर से प्रॉपर्टी में Integer[] का साइज़ पता चलता है
  • configArray[4], 1 से पता चलता है कि प्रॉपर्टी की वैल्यू Long है
  • configArray[5], इस नंबर से प्रॉपर्टी में Long[] का साइज़ पता चलता है
  • configArray[6], 1 से पता चलता है कि प्रॉपर्टी की वैल्यू Float है
  • configArray[7], इस नंबर से प्रॉपर्टी में Float[] का साइज़ पता चलता है
  • configArray[8], इस नंबर से पता चलता है कि प्रॉपर्टी में byte[] का साइज़ कितना है.

उदाहरण के लिए, configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} से पता चलता है कि प्रॉपर्टी की वैल्यू String, Boolean, Integer है. साथ ही, इसमें तीन पूर्णांकों वाला एक कलेक्शन भी है.

क्षेत्र के आईडी का कॉन्फ़िगरेशन

हर प्रॉपर्टी कॉन्फ़िगरेशन में, इलाके के आईडी कॉन्फ़िगरेशन की सूची भी शामिल हो सकती है. यह सूची, ग्लोबल प्रॉपर्टी के लिए ज़रूरी नहीं है. हालांकि, ज़ोन की प्रॉपर्टी (एक से ज़्यादा इलाकों में काम करने वाली प्रॉपर्टी) के लिए यह सूची ज़रूरी है. हर क्षेत्र के आईडी कॉन्फ़िगरेशन में ये फ़ील्ड होते हैं.

फ़ील्ड ब्यौरा
areaId इस इलाके का आईडी. जगह के आईडी देखें.
minInt32Value और maxInt32Value
  • बूट टाइम पर INT32 टाइप की प्रॉपर्टी के लिए, कम से कम और ज़्यादा से ज़्यादा वैल्यू (ज़रूरी नहीं). अन्य सभी टाइप के लिए, इसकी वैल्यू 0 होनी चाहिए. अगर दोनों की वैल्यू 0 है, तो इस पर ध्यान न दें.
  • अगर ग्लोबल प्रॉपर्टी के लिए, कम से कम और ज़्यादा से ज़्यादा वैल्यू तय करनी है, तो क्षेत्र के आईडी 0 के साथ क्षेत्र के कॉन्फ़िगरेशन का इस्तेमाल करना होगा.
  • यह वैल्यू स्टैटिक होती है और रनटाइम पर कम से कम या ज़्यादा से ज़्यादा वैल्यू में बदलाव होने पर भी, यह नहीं बदलती. डाइनैमिक कम से कम या ज़्यादा से ज़्यादा वैल्यू के लिए, IVehicle#getMinMaxSupportedValue एट्रिब्यूट की वैल्यू सेट करें.
minInt64Value और maxInt64Value
  • बूट टाइम पर INT64 टाइप की प्रॉपर्टी के लिए, कम से कम और ज़्यादा से ज़्यादा वैल्यू (ज़रूरी नहीं). अन्य सभी टाइप के लिए, इसकी वैल्यू 0 होनी चाहिए. अगर दोनों की वैल्यू 0 है, तो इस पर ध्यान न दें.
  • अगर ग्लोबल प्रॉपर्टी के लिए, कम से कम और ज़्यादा से ज़्यादा वैल्यू तय करनी है, तो क्षेत्र के आईडी 0 के साथ क्षेत्र के कॉन्फ़िगरेशन का इस्तेमाल करना होगा.
  • यह वैल्यू स्टैटिक होती है और रनटाइम पर कम से कम या ज़्यादा से ज़्यादा वैल्यू में बदलाव होने पर भी, यह नहीं बदलती. डाइनैमिक कम से कम या ज़्यादा से ज़्यादा वैल्यू के लिए, IVehicle#getMinMaxSupportedValue एट्रिब्यूट की वैल्यू सेट करें.
minFloatValue और maxFloatValue
  • बूट टाइम पर फ़्लोट टाइप की प्रॉपर्टी के लिए, कम से कम और ज़्यादा से ज़्यादा वैल्यू सेट की जा सकती है. अन्य सभी टाइप के लिए, इसकी वैल्यू 0 होनी चाहिए. अगर दोनों की वैल्यू 0.0 है, तो इसे अनदेखा कर दिया जाता है.
  • अगर ग्लोबल प्रॉपर्टी के लिए, कम से कम और ज़्यादा से ज़्यादा वैल्यू तय करनी है, तो क्षेत्र के आईडी 0 के साथ क्षेत्र के कॉन्फ़िगरेशन का इस्तेमाल करना होगा.
  • यह वैल्यू स्टैटिक होती है और रनटाइम पर कम से कम या ज़्यादा से ज़्यादा वैल्यू में बदलाव होने पर भी, यह नहीं बदलती. डाइनैमिक कम से कम या ज़्यादा से ज़्यादा वैल्यू के लिए, IVehicle#getMinMaxSupportedValue एट्रिब्यूट की वैल्यू सेट करें.
(Android 14 में नया)
supportedEnumValues
  • अगर प्रॉपर्टी को enum टाइप प्रॉपर्टी के तौर पर तय किया गया है, तो बूट टाइम पर काम करने वाली वैल्यू की वैकल्पिक सूची. अगर इसे नहीं बताया गया है (खाली है) या Android 14 से पहले के वर्शन पर, तो यह मान लिया जाता है कि सभी enum वैल्यू काम करती हैं.
  • अगर ग्लोबल प्रॉपर्टी के लिए, enum की वैल्यू तय करनी हैं, तो क्षेत्र के आईडी 0 के साथ क्षेत्र के कॉन्फ़िगरेशन का इस्तेमाल करना होगा.
  • यह वैल्यू स्टैटिक होती है और रनटाइम के दौरान, काम करने वाली वैल्यू में बदलाव होने पर भी नहीं बदलती. डाइनैमिक तौर पर इस्तेमाल की जा सकने वाली वैल्यू के लिए, IVehicle#getSupportedValuesLists लागू करें.
  • यह सिर्फ़ enum टाइप की प्रॉपर्टी के लिए लागू होता है. अन्य टाइप के लिए, यह फ़ील्ड खाली होना चाहिए. इस्तेमाल की जा सकने वाली वैल्यू को अन्य नॉन-एनम टाइप के लिए दिखाने के लिए, IVehicle#getSupportedValuesLists का इस्तेमाल करें.
(Android 15 में नया क्या है)
supportVariableUpdateRate
  • वैरिएबल अपडेट करने की दर की सुविधा उपलब्ध है या नहीं. यह सिर्फ़ लगातार काम करने वाली प्रॉपर्टी के लिए लागू होता है.
  • अगर यह true है, तो ऐप्लिकेशन किसी सदस्यता के लिए वैरिएबल अपडेट रेट चालू कर सकता है. इससे प्रॉपर्टी अपडेट इवेंट सिर्फ़ तब मिलेंगे, जब प्रॉपर्टी की वैल्यू में बदलाव होगा. इसका मतलब है कि लगातार अपडेट होने वाली प्रॉपर्टी को, बदलाव होने पर अपडेट होने वाली प्रॉपर्टी के तौर पर माना जाएगा.
  • अगर किसी प्रॉपर्टी के सभी सदस्य, वैरिएबल अपडेट रेट की सुविधा चालू करते हैं, तो VHAL को सदस्यता का अनुरोध करने पर, प्रॉपर्टी के लिए वैरिएबल अपडेट रेट की सुविधा चालू हो जाती है. साथ ही, VHAL को प्रॉपर्टी अपडेट इवेंट सिर्फ़ तब भेजने चाहिए, जब प्रॉपर्टी की वैल्यू में बदलाव हो.
  • अगर कोई सदस्य अपडेट की तय दर का अनुरोध करता है, तो VHAL को सदस्यता का अनुरोध करने पर, प्रॉपर्टी के लिए अपडेट की अलग-अलग दरें बंद हो जाती हैं. साथ ही, AAOS उन क्लाइंट के लिए डुप्लीकेट इवेंट फ़िल्टर कर देता है जो अपडेट की अलग-अलग दर का अनुरोध करते हैं.
  • बेहतर परफ़ॉर्मेंस के लिए, यह सुझाव दिया जाता है कि सभी नॉन-हार्टबीट कंटीन्यूअस प्रॉपर्टी के लिए, वैरिएबल अपडेट रेट की सुविधा चालू करें. हालांकि, अगर प्रॉपर्टी का डेटा बहुत ज़्यादा है (उदाहरण के लिए, 1 केबी का बाइट ऐरे) और यह कैश मेमोरी में ज़्यादा जगह ले सकता है, तो इस सुविधा को चालू न करें.
(Android 16 में नया)
hasSupportedValueInfo
  • अगर null नहीं है, तो यह दिखाता है कि यह प्रॉपर्टी, कम से कम या ज़्यादा से ज़्यादा इस्तेमाल की जा सकने वाली वैल्यू या इस्तेमाल की जा सकने वाली वैल्यू की सूची के बारे में बताती है.
  • इस फ़ील्ड से यह कंट्रोल किया जाता है कि डाइनैमिक तरीके से काम करने वाले वैल्यू एपीआई: getMinMaxSupportedValue, getSupportedValuesLists, subscribeSupportedValueChange, unsubscribeSupportedValueChange इस प्रॉपर्टी आईडी और इलाके के आईडी के लिए काम करते हैं या नहीं.
  • अगर ऐसा नहीं है null, तो VHAL को इस प्रॉपर्टी आईडी और एरिया आईडी के लिए इन एपीआई को लागू करना होगा.
  • अगर null या Android 15 या इससे पहले के वर्शन में, इस प्रॉपर्टी आईडी और एरिया आईडी के लिए डाइनैमिक वैल्यू इस्तेमाल नहीं की जा सकतीं. क्लाइंट को वाहन की प्रॉपर्टी के कॉन्फ़िगरेशन में दी गई, काम करने वाली स्थिर वैल्यू की जानकारी का इस्तेमाल करना होगा.

क्षेत्र के टाइप

VehicleArea.aidl में इन्हें enum के तौर पर तय किया गया है. यहां दिए गए क्षेत्र के टाइप इस्तेमाल किए जा सकते हैं.

जगह का टाइप मान ब्यौरा
ग्लोबल 0x01000000 यह प्रॉपर्टी, एक ग्लोबल प्रॉपर्टी है और इसमें एक से ज़्यादा इलाके शामिल नहीं हैं.
WINDOW 0x03000000 विंडो के आधार पर तय किया गया क्षेत्र, VehicleAreaWindow enum का इस्तेमाल करता है.
मिरर 0x04000000 मिरर के हिसाब से तय की गई जगह, VehicleAreaMirror enum का इस्तेमाल करती है.
SEAT 0x05000000 सीटों के आधार पर तय किया गया क्षेत्र, VehicleAreaSeat enum का इस्तेमाल करता है.
DOOR 0x06000000 दरवाज़ों के हिसाब से तय किया गया क्षेत्र. इसके लिए, VehicleAreaDoor enum का इस्तेमाल किया जाता है.
WHEEL 0x07000000 पहियों के हिसाब से तय किया गया क्षेत्र. इसमें VehicleAreaWheel enum का इस्तेमाल किया जाता है.

ज़ोन के हिसाब से तय की गई हर प्रॉपर्टी के लिए, पहले से तय किए गए एरिया टाइप का इस्तेमाल करना ज़रूरी है. हर एरिया टाइप के लिए, बिट फ़्लैग का एक सेट होता है. इसे एरिया टाइप के लिए enum में तय किया जाता है. उदाहरण के लिए, SEAT एरिया में VehicleAreaSeat enum तय किए जाते हैं:

  • 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 यह सुविधा सिर्फ़ पीछे की दाईं सीट पर लागू होती है.

ज़्यादा जानने के लिए, एचवीएसी देखें.