VSIDL में आईपी पर आधारित स्केलेबल सेवा-उन्मुख मिडलवेयर (SOME/IP) मैपिंग तय करते समय, SOME/IP पेलोड के स्ट्रक्चर के बारे में बताया जाता है. SomeIpType मैसेज का इस्तेमाल करके, स्ट्रक्चर के बारे में बताया जाता है. इससे प्रिमिटिव, स्ट्रिंग, ऐरे, और कॉम्प्लेक्स स्ट्रक्ट को मॉडल किया जा सकता है.
इस पेज पर, SomeIpStruct टाइप की परिभाषा लिखने के तरीके के बारे में बताया गया है. इसका इस्तेमाल, इवेंट और तरीके की मैपिंग के लिए type_definition ब्लॉक में किया जाता है.
SomeIpStruct मैसेज
SomeIpStruct मैसेज, स्ट्रक्चर्ड SOME/IP पेलोड को दिखाता है. इसमें कई फ़ील्ड होते हैं. यहां तय किए गए स्ट्रक्चर का इस्तेमाल SOME/IP ब्रोकर करता है. इससे वह रॉ SOME/IP बाइट और SDV प्रोटोबफ़ मैसेज के फ़ील्ड के बीच अनुवाद कर पाता है.
स्ट्रक्चर तय करते समय, दो मुख्य प्रॉपर्टी कॉन्फ़िगर की जाती हैं:
length_field_size(ज़रूरी नहीं): यह लंबाई वाले फ़ील्ड का साइज़ (बाइट में) तय करता है. यह फ़ील्ड, क्रम से लगाए गए पेलोड में स्ट्रक्चर से पहले आता है.LengthFieldSizeईनम से इस्तेमाल की गई वैल्यू मेंZERO(लंबाई वाला फ़ील्ड नहीं),ONE,TWO, औरFOURशामिल हैं.field(दोहराया गया): यह उन फ़ील्ड की सूची होती है जिनसे स्ट्रक्चर बनता है.
स्ट्रक्चर फ़ील्ड तय करना
SomeIpStruct में मौजूद हर फ़ील्ड के लिए, यह जानकारी देना ज़रूरी है:
field_name: फ़ील्ड का नाम. यह नाम, SDV protobuf मैसेज में तय किए गए फ़ील्ड के नाम से पूरी तरह मेल खाना चाहिए, ताकि मैसेज का सही तरीके से अनुवाद हो सके.field_type: फ़ील्ड (SomeIpType) का SOME/IP डेटा टाइप. यह प्रिमिटिव, स्ट्रिंग, ऐरे या कोई अन्य नेस्टेड स्ट्रक्चर हो सकता है.
SomeIpType फ़ील्ड टाइप लिखें
field_type ब्लॉक, खास डेटा टाइप को कॉन्फ़िगर करता है. इसके लिए, इनमें से किसी एक वैरिएंट का इस्तेमाल किया जाता है:
- प्रिमिटिव टाइप:
someip_primitiveका इस्तेमालUINT8,UINT32,INT32,FLOAT32, औरBOOLजैसी वैल्यू के साथ करें. - स्ट्रिंग:
someip_stringका इस्तेमाल करें. साथ ही, एन्कोडिंग (उदाहरण के लिए,UTF_8,UTF_16_LE) और लंबाई की जानकारी (fixed_lengthयाlength_field_size) दें. - ऐरे:
someip_arrayका इस्तेमाल करें और लंबाई की जानकारी (fixed_lengthयाlength_field_size) के साथ-साथarray_typeको तय करें.array_type, एक और रिकर्सिवSomeIpTypeहै. - नेस्ट किए गए स्ट्रक्चर: किसी अन्य स्ट्रक्चर की परिभाषा को बार-बार एम्बेड करने के लिए,
someip_structका इस्तेमाल करें.
उदाहरण: स्ट्रक्ट टाइप की परिभाषा लिखना
यहां type_definition ब्लॉक में SomeIpStruct लिखने का एक उदाहरण दिया गया है. इस पेलोड में, interval नाम का 8-बिट का बिना हस्ताक्षर वाला पूर्णांक और counter नाम का 32-बिट का बिना हस्ताक्षर वाला पूर्णांक शामिल है:
type_definition {
# No length field precedes this struct
length_field_size: ZERO
# First field: interval
field {
field_name: "interval"
field_type {
someip_primitive: UINT8
}
}
# Second field: counter
field {
field_name: "counter"
field_type {
someip_primitive: UINT32
}
}
}
कॉम्प्लेक्स टाइप जोड़ना
स्ट्रक्ट में डाइनैमिक लेंथ वाला स्ट्रिंग फ़ील्ड और एक ऐरे शामिल करने के लिए, इस तरह के फ़ील्ड जोड़ें:
field {
field_name: "status_message"
field_type {
someip_string {
string_encoding: UTF_8
length_field_size: FOUR
}
}
}
field {
field_name: "measurements"
field_type {
someip_array {
length_field_size: FOUR
array_type { someip_primitive: FLOAT32 }
}
}
}