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

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 }
    }
  }
}