SOME/IP मैपिंग फ़ाइल लिखना

इस दस्तावेज़ में, SOME/IP मैपिंग फ़ाइल लिखने के बारे में बताया गया है. SOME/IP मैपिंग फ़ाइल से यह तय होता है कि SDV सेवाएं, SOME/IP सेवाओं से कैसे मैप होती हैं और इसके उलट भी. इससे SDV और नॉन-एसडीवी ईसीयू के बीच कम्यूनिकेशन आसान हो जाता है.

आपकी .vsidl फ़ाइल में मौजूद VsidlEntry मैसेज में मौजूद some_ip_mapping फ़ील्ड में, SOME/IP मैपिंग की जानकारी होती है. some_ip_mapping फ़ील्ड की मदद से, SDV सेवा की परिभाषाओं से अलग SOME/IP मैपिंग तय की जा सकती हैं.

SomeIp Mapping proto में वह सारी जानकारी होती है जो SOME/IP ब्रोकर को SDV और SOME/IP ईसीयू के बीच ट्रांसफ़ॉर्मेशन के लिए चाहिए होती है. यह proto, SOME/IP सेवा को SDV ईकोसिस्टम में या SDV सेवा इकाइयों को AUTOSAR ईकोसिस्टम में मैप कर सकता है.

सबसे ज़रूरी सिद्धांत

मैपिंग फ़ाइल लिखने से पहले, इन मुख्य आइडेंटिफ़ायर और कॉन्सेप्ट के बारे में जान लें:

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

  • SDV टाइप: यह नाम, एसडीवी मैसेज के पेलोड के डेटा फ़ॉर्मैट के लिए यूनीक आइडेंटिफ़ायर है. यह एक प्रोटो मैसेज से मेल खाता है.

  • SOME/IP ServiceIdentifier (SOME/IP एसआईडी): यह SOME/IP सेवाओं की पहचान करता है. इसके लिए, यह सेवा आईडी (uint16), इंस्टेंस आईडी (uint16), मुख्य वर्शन (uint8), और माइनर वर्शन (uint32) का इस्तेमाल करता है.

  • SDV आरपीसी: SDV सेवाएं, method name (स्ट्रिंग), Type, और channel नाम से पहचाने गए तरीके उपलब्ध कराती हैं.

  • SDV Pub/Sub: SDV सेवाओं की ओर से पब्लिश किए गए या जिनकी सदस्यता ली गई है. इन्हें Type और Topic नाम से पहचाना जाता है

  • SOME/IP RPC: इसकी पहचान सेवा आईडी, इंस्टेंस आईडी, और तरीके के आईडी (uint16) से होती है.

  • SOME/IP इवेंट: इन्हें Pub/Sub के लिए SOME/IP सेवाएं पब्लिश करती हैं. इनकी पहचान सेवा आईडी, इंस्टेंस आईडी, इवेंट आईडी (uint16) से होती है. साथ ही, ये इवेंट-ग्रुप (uint16) से जुड़े होते हैं.

  • SOME/IP ब्रोकर: यह SDV में ब्रिजिंग कॉम्पोनेंट होता है. यह SDV और SOME/IP सेवाओं के बीच कम्यूनिकेशन को चालू करने के लिए, SOME/IP मैपिंग फ़ाइल का इस्तेमाल करता है.

फ़ाइल का स्ट्रक्चर और जगह

SOME/IP मैपिंग की जानकारी को दोहराए गए फ़ील्ड, some_ip_mapping के तौर पर शामिल किया जाता है. यह जानकारी, आपकी .vsidl फ़ाइल में मौजूद VsidlEntry मैसेज में होती है. इससे SDV सेवा की परिभाषाओं से अलग, SOME/IP मैपिंग को तय किया जा सकता है. इससे आपको मैपिंग को किसी खास फ़ाइल में मैनेज करने में मदद मिलती है.

// The root message for VSIDL files.
message VsidlEntry {
  // Required. Package name for entities mentioned in the file.
  string package = 1;
  // List of SDV service bundles defined in the file.
  repeated ServiceBundle sdv_service_bundle = 2;
  // Enables custom extensions beyond the standard VSIDL model.
  repeated google.xml.Any extension = 3;

  // SOMEIP mapping rules.
  repeated sdv.someip.v1.SomeIpMapping some_ip_mapping = 4;
  // VHAL mapping rules.
  repeated VhalMapping vhal_mapping = 5;
}

मैपिंग फ़ाइल बनाना

SOME/IP मैपिंग फ़ाइल में आम तौर पर ऐसी परिभाषाएं होती हैं जो SDV इकोसिस्टम और SOME/IP नेटवर्क प्रोटोकॉल के बीच अनुवाद करती हैं. मैपिंग को दो मुख्य तरीकों से तय किया जा सकता है:

  • sdv_type_mapping: यह SDV टाइप (जैसे कि RPC इंटरफ़ेस या पब्लिकेशन विषय) को SOME/IP सेवा से मैप करता है.
  • someip_service_mapping: यह रॉ SOME/IP सेवा (और उसके इंस्टेंस, इवेंट या तरीकों) को SDV Pub/Sub विषयों या RPC चैनलों पर मैप करता है.

एक मैपिंग फ़ाइल में एक या उससे ज़्यादा SomeIpMapping परिभाषाएं होती हैं.

SDV टाइप मैपिंग

sdv_type_mapping का इस्तेमाल, मौजूदा एसडीवी टाइप के लिए किया जाता है. इन्हें आपको SOME/IP नेटवर्क पर दिखाना है.

SDV टाइप मैपिंग स्ट्रक्चर

आपको यह जानकारी देनी होगी:

  • unit_type: मैप किया जा रहा एसडीवी टाइप (package_name और type_name से पहचाना जाता है).
  • someip_service_id: यह 16-बिट वाला SOME/IP सेवा आईडी है.
  • version_major और version_minor: SOME/IP सेवा का वर्शन.
  • service_oriented_mapping: इससे मैपिंग के खास व्यवहार के बारे में पता चलता है. यह व्यवहार, आरपीसी इंटरफ़ेस या पब्लिकेशन, दोनों के लिए हो सकता है.

पब्लिकेशन मैपिंग का उदाहरण

अगर आपका एसडीवी टाइप कोई विषय (पब्लिकेशन) है, तो publication_mapping का इस्तेमाल करें. यह डेटा के स्ट्रक्चर (type_definition) और SOME/IP इवेंट आईडी या EventGroup आईडी को मैप करता है. इसके बाद, SDV के खास विषयों को SOME/IP इंस्टेंस पर मैप करता है.

sdv_type_mapping {
  unit_type {
    package_name: "com.android.sdv.samples"
    type_name: "SpeedData"
  }
  someip_service_id: 0x1001
  version_major: 1
  version_minor: 0
  service_oriented_mapping {
    publication_mapping {
      offered_topic {
        simple_mapping {
          group_id: 1
          event_id: 0x8001
        }
        # type_definition defines the structural mapping to SOME/IP payloads
        type_definition {
          # ... (SomeIpStruct definition) ...
        }
      }
      # Maps the SDV topic name to a specific SOME/IP instance
      topic_mapping {
        topic: "vehicle_speed_topic"
        instance_id: 0x0001
      }
    }
  }
}

आरपीसी इंटरफ़ेस मैपिंग का उदाहरण

अगर आपका SDV टाइप, आरपीसी इंटरफ़ेस है, तो rpc_interface_mapping का इस्तेमाल करें. SDV प्रोसीजर के नामों को SOME/IP method_id इंस्टेंस पर मैप करें. साथ ही, SDV चैनलों को SOME/IP इंस्टेंस से लिंक करें.

sdv_type_mapping {
  unit_type {
    package_name: "com.android.sdv.samples"
    type_name: "DoorControl"
  }
  someip_service_id: 0x2001
  version_major: 1
  version_minor: 0
  service_oriented_mapping {
    rpc_interface_mapping {
      offered_interface {
        method {
          procedure: "LockDoors"
          method_id: 0x0001
          # request_payload_mapping and response_payload_mapping can be defined here
        }
      }
      rpc_channel_mapping {
        channel: "front_doors"
        instance_id: 0x0001
      }
    }
  }
}

SOME/IP सेवा मैपिंग

someip_service_mapping यह कॉन्फ़िगर करता है कि नेटवर्क पर खोजी गई या ऑफ़र की गई कोई खास SOME/IP सेवा, SDV विषयों और चैनलों पर कैसे मैप होती है. इससे इवेंट और आरपीसी की जटिल पैरामीटर वाली मैपिंग की जा सकती है.

SOME/IP सेवा मैपिंग का स्ट्रक्चर

  • someip_service_id, version_major, version_minor: SOME/IP सेवा की पहचान करता है.
  • sd_behavior (ज़रूरी नहीं): इससे डिवाइस और सेवाओं की अपने-आप पहचान करने के व्यवहार (EXACT_OR_ANY_MINOR_VERSION या MINIMUM_MINOR_VERSION) के बारे में पता चलता है

  • instance: यह SDV सेवा इकाइयों और विषयों को पैरामीटर के तौर पर सेट करता है, ताकि उन्हें खास SOME/IP instance_id इंस्टेंस के लिए इस्तेमाल किया जा सके.

  • instance_impl: इससे इंस्टेंस को लागू करने, इवेंट या तरीकों को पैरामीटर वाली सेवा इकाइयों से मैप करने के बारे में पता चलता है.

इवेंट मैपिंग का उदाहरण

इस उदाहरण में, SOME/IP इवेंट को SDV विषय में मैप किया गया है. यह instance का इस्तेमाल करके, आईडी 1 को लिटरल स्ट्रिंग speed_sensor_unit पर मैप करता है.

someip_service_mapping {
  someip_service_id: 0x1001
  version_major: 1
  version_minor: 0
  # Parameterize instances
  instance {
    instance_id: 0x0001
    sdv_service_unit_parameterization {
      key: 1
      value: "speed_sensor_unit"
    }
    sdv_topic_parameterization {
      key: 1
      value {
        topic: "speed_topic"
        capacity: 10
      }
    }
  }
  # Description of all instances
  instance_impl {
    offered_event {
      group_id: 1
      event_id: 0x8001
      simple_event {
        sdv_unit_type {
          package_name: "com.android.sdv.samples"
          type_name: "SpeedData"
        }
        # Refers to key 1 in sdv_service_unit_parameterization. If unspecified,
        # service unit name will be automatically generated by the broker
        service_unit: 1
        topic: 1        # Refers to key 1 in sdv_topic_parameterization
        message_translation_mode: REFLECTION
        type_definition {
          # ... (SomeIpStruct definition) ...
        }
      }
    }
  }
}

RPC मैपिंग का उदाहरण

इस उदाहरण में, SOME/IP आरपीसी सेवा को SDV आरपीसी इंटरफ़ेस से मैप किया गया है. इवेंट मैपिंग की तरह ही, सेवा, सेवा यूनिट के नाम को पैरामीटर के तौर पर इस्तेमाल करने के लिए इंस्टेंस का इस्तेमाल करती है. यह SDV में आरपीसी चैनल के नाम से मेल खाता है. इसके बाद, instance_impl ब्लॉक, SDV के प्रोसीज़र के नाम से SOME/IP method_id को लिंक करने के लिए, offered_interface के इंस्टेंस को तय करता है:

someip_service_mapping {
  someip_service_id: 0x2001
  version_major: 1
  version_minor: 0
  # Parameterize instances
  instance {
    instance_id: 0x0001
    sdv_service_unit_parameterization {
      key: 1
      value: "door_control_unit"
    }
  }
  instance_impl {
    offered_interface {
      sdv_unit_type {
        package_name: "com.android.sdv.samples"
        type_name: "DoorControl"
      }
      # Refers to key 1 in sdv_service_unit_parameterization. This corresponds
      # to the RPC channel name in SDV.
      service_unit: 1
      method {
        procedure: "LockDoors"
        method_id: 0x0001
     # request_payload_mapping and response_payload_mapping can be defined here
      }
    }
  }
}

बेहतर सुविधाएं

इस सेक्शन में, SOME/IP मैपिंग की मदद से काम करने वाली ऐडवांस सुविधाओं के बारे में बताया गया है.

ग्रुप इवेंट

group_event की मदद से, एक ही SOME/IP इवेंट को एक साथ कई SDV विषयों में बांटा और मैप किया जा सकता है. इसके लिए, कई event_part एंट्री तय की जाती हैं. साथ ही, field_name_mapping का इस्तेमाल करके, आने वाले SOME/IP पेलोड फ़ील्ड के नामों को SDV पेलोड फ़ील्ड के नामों से मैप किया जाता है:

offered_event {
  group_id: 1
  event_id: 0x8002
  group_event {
    type_definition {
      # Definition of the complete SOME/IP payload
    }
    event_part {
      sdv_unit_type {
        package_name: "com.android.sdv.samples"
        type_name: "PartAData"
      }
      service_unit: 1
      topic: 1
      field_name_mapping {
        key: "someip_field_a"
        value: "sdv_field_a"
      }
    }
    event_part {
      sdv_unit_type {
        package_name: "com.android.sdv.samples"
        type_name: "PartBData"
      }
      service_unit: 2
      topic: 2
      field_name_mapping {
        key: "someip_field_b"
        value: "sdv_field_b"
      }
    }
  }
}

फ़ायर ऐंड फ़ॉरगेट मैपिंग

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

इसे कॉन्फ़िगर करने के लिए, आपको offered_topic ब्लॉक में someip_ff_methods: true सेट करना होगा. साथ ही, अपने topic_mapping में डेस्टिनेशन fire_and_forget_method की राउटिंग की जानकारी देनी होगी.

sdv_type_mapping {
  unit_type {
    package_name: "com.android.sdv.sample.someip"
    type_name: "CounterLoad"
  }
  someip_service_id: 0x13
  version_major: 1
  version_minor: 0
  service_oriented_mapping {
    publication_mapping {
      offered_topic {
        type_definition {
          # ... (SomeIpStruct definition) ...
        }
        someip_ff_methods: true
      }
      topic_mapping {
        topic: "counter-load-start-counter"
        instance_id: 0x1
        fire_and_forget_method {
          service_id: 0x3700
          instance_id: 0x1000
          version_major: 1
          version_minor: 0
          method_id: 0x1000
        }
      }
    }
  }
}