SOME/IP टाइप की परिभाषा लिखना

VSIDL में, आईपी पर आधारित स्केलेबल सेवा-उन्मुख मिडलवेयर (एसओएमई/आईपी) मैपिंग तय करते समय, आपको हर एसओएमई/आईपी मैसेज के वायर फ़ॉर्मैट सीरियलाइज़ेशन और पेलोड एन्कोडिंग के बारे में बताना होता है. SomeIpType और SomeIpStruct की परिभाषाओं का इस्तेमाल करके, प्रिमिटिव, स्ट्रिंग, ऐरे, और नेस्ट किए गए स्ट्रक्चर को मॉडल किया जा सकता है. ये AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) और SOME/IP स्टैक पेलोड एन्कोडिंग के नियमों (COVESA vsomeip भी शामिल है) से मेल खाते हैं.

इस पेज पर, SomeIpStruct टाइप की परिभाषा लिखने के तरीके के बारे में बताया गया है. इसका इस्तेमाल, इवेंट और तरीके की मैपिंग के लिए type_definition ब्लॉक में किया जाता है.

SomeIpStruct मैसेज

SomeIpStruct मैसेज, स्ट्रक्चर्ड SOME/IP पेलोड को दिखाता है. इसमें कई फ़ील्ड होते हैं. यहां तय किए गए स्ट्रक्चर का इस्तेमाल SOME/IP ब्रोकर करता है. इससे वह रॉ SOME/IP बाइट और SDV protobuf मैसेज के फ़ील्ड के बीच अनुवाद कर पाता है.

स्ट्रक्चर तय करते समय, दो मुख्य प्रॉपर्टी कॉन्फ़िगर की जाती हैं:

  • length_field_size (ज़रूरी नहीं): यह फ़ील्ड, क्रम से लगाए गए पेलोड में struct से पहले मौजूद length फ़ील्ड का साइज़ (बाइट में) बताता है. 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 (जो एक और रिकर्सिव 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 }
    }
  }
}

AUTOSAR ARXML और vsomeip पेलोड एन्कोडिंग को मैप करना

AAOS SDV को बाहरी AUTOSAR इलेक्ट्रॉनिक कंट्रोल यूनिट (ईसीयू) या COVESA vsomeip जैसे SOME/IP स्टैक के साथ इंटिग्रेट करते समय, पक्का करें कि आपका VSIDL type_definition, आपके सिस्टम के ARXML (SOMEIP-TRANSFORMATION-PROPS और SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS) या vsomeip कॉन्फ़िगरेशन में तय किए गए वायर सीरियलाइज़ेशन पैरामीटर से मेल खाता हो:

AUTOSAR ARXML और vsomeip पैरामीटर VSIDL SomeIpType के बराबर वायर सीरियलाइज़ेशन और पेलोड एन्कोडिंग का नियम
sizeOfStructLengthField (0, 1, 2, 4 बाइट) SomeIpStruct.length_field_size (ZERO, ONE, TWO, FOUR) यह सीरियलाइज़ किए गए struct पेलोड से पहले, बाइट की लंबाई का प्रीफ़िक्स जोड़ता है. लंबाई के प्रीफ़िक्स के बिना फ़िक्स्ड-लेआउट स्ट्रक्चर के लिए, ZERO पर सेट किया गया.
sizeOfArrayLengthField (0, 1, 2, 4 बाइट) SomeIpArray.length_field_size (ZERO, ONE, TWO, FOUR) या fixed_length डाइनैमिक अरे के लिए, लंबाई के फ़ील्ड का प्रीफ़िक्स (ONE, TWO या FOUR बाइट) ज़रूरी होता है. इससे, क्रम से लगाए गए अरे एलिमेंट की बाइट की लंबाई का पता चलता है.
sizeOfStringLengthField और एन्कोडिंग (UTF-8, UTF-16LE, UTF-16BE) SomeIpString.string_encoding और length_field_size या fixed_length यह वैरिएबल लेंथ और फ़िक्स्ड लेंथ वाली स्ट्रिंग के लिए, AUTOSAR स्ट्रिंग सीरियलाइज़ेशन के नियमों (इसमें बाइट ऑर्डर मार्क और नल-टर्मिनेशन हैंडलिंग शामिल है) के मुताबिक है.
प्रिमिटिव बेस टाइप (uint8, uint16, uint32, float32, boolean) SomeIpPrimitive (UINT8, UINT16, UINT32, INT32, FLOAT32, BOOL) यह टारगेट प्रोटोबफ़ फ़ील्ड से मेल खाने वाले नेटवर्क बाइट ऑर्डर (डिफ़ॉल्ट रूप से SOME/IP स्पेसिफ़िकेशन के हिसाब से बिग-एंडियन) में प्रिमिटिव वैल्यू को एन्कोड करता है.