একটি কিছু/আইপি ম্যাপিং ফাইল লিখুন

এই ডকুমেন্টটি আপনাকে একটি SOME/IP ম্যাপিং ফাইল লেখার পদ্ধতি সম্পর্কে নির্দেশনা দেয়। একটি SOME/IP ম্যাপিং ফাইল নির্ধারণ করে যে, কীভাবে SDV সার্ভিসগুলো SOME/IP সার্ভিসে ম্যাপ করা হয় এবং এর বিপরীতটিও ঘটে, যা SDV এবং নন-SDV ECU-গুলোর মধ্যে যোগাযোগ সহজতর করে।

আপনার .vsidl ফাইলের VsidlEntry মেসেজের অন্তর্ভুক্ত some_ip_mapping ফিল্ডটিতে SOME/IP ম্যাপিংয়ের তথ্য থাকে। some_ip_mapping ফিল্ডটি আপনাকে SDV সার্ভিস ডেফিনিশন থেকে আলাদাভাবে SOME/IP ম্যাপিং নির্ধারণ করার সুযোগ দেয়।

SomeIp Mapping প্রোটোটিতে SOME/IP ব্রোকারের SDV এবং SOME/IP ECU-গুলির মধ্যে রূপান্তরের জন্য প্রয়োজনীয় সমস্ত তথ্য থাকে। এই প্রোটোটি একটি SOME/IP সার্ভিসকে SDV ইকোসিস্টেমে অথবা SDV সার্ভিস ইউনিটগুলিকে AUTOSAR ইকোসিস্টেমে ম্যাপ করতে পারে।

মূল ধারণা

আপনার ম্যাপিং ফাইল লেখার আগে, এই মূল শনাক্তকারী এবং ধারণাগুলো বুঝে নিন:

  • এসডিভি ফুললি কোয়ালিফাইড ইনস্ট্যান্স নেম (FQIN): এই অনন্য স্ট্রিংটি এসডিভি সার্ভিস ইনস্ট্যান্সগুলোকে শনাক্ত করে। এটি ভিএম নেম, প্যাকেজ নেম, সার্ভিস নেম এবং ইনস্ট্যান্স নেম দিয়ে গঠিত।

  • SDV টাইপ: এই নামটি একটি SDV মেসেজ পেলোডের ডেটা ফরম্যাটের জন্য একটি অনন্য শনাক্তকারী এবং এটি একটি প্রোটো মেসেজের অনুরূপ।

  • SOME/IP ServiceIdentifier (SOME/IP SID): সার্ভিস আইডি ( uint16 ), ইনস্ট্যান্স আইডি ( uint16 ), মেজর ভার্সন ( uint8 ), এবং মাইনর ভার্সন ( uint32 )-এর সমন্বয়ে SOME/IP সার্ভিসগুলোকে অনন্যভাবে শনাক্ত করে।

  • SDV RPC: SDV পরিষেবা দ্বারা প্রদত্ত মেথডসমূহ, যা method name (স্ট্রিং), ধারণকারী Type এবং একটি channel নাম দ্বারা চিহ্নিত করা হয়।

  • SDV পাব/সাব: SDV পরিষেবা দ্বারা প্রকাশিত বা সাবস্ক্রাইব করা বিষয়সমূহ, যা একটি Type এবং Topic নাম দ্বারা চিহ্নিত করা হয়।

  • SOME/IP RPC: সার্ভিস আইডি, ইনস্ট্যান্স আইডি এবং মেথড আইডি ( uint16 ) দ্বারা শনাক্ত করা হয়।

  • SOME/IP ইভেন্ট: Pub/Sub-এর জন্য SOME/IP পরিষেবা দ্বারা প্রকাশিত এবং পরিষেবা আইডি, ইনস্ট্যান্স আইডি, ইভেন্ট আইডি ( uint16 ) দ্বারা চিহ্নিত, এবং একটি ইভেন্ট-গ্রুপের ( uint16 ) অন্তর্গত।

  • SOME/IP ব্রোকার: SDV-এর একটি সংযোগকারী উপাদান যা SDV এবং SOME/IP পরিষেবাগুলির মধ্যে যোগাযোগ সক্ষম করার জন্য SOME/IP ম্যাপিং ফাইলটি ব্যবহার করে।

ফাইলের কাঠামো এবং অবস্থান

আপনার .vsidl ফাইলের VsidlEntry মেসেজের মধ্যে SOME/IP ম্যাপিং তথ্যটি some_ip_mapping নামক একটি পুনরাবৃত্ত ফিল্ড হিসেবে অন্তর্ভুক্ত থাকে। এর ফলে 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 পাব/সাব টপিক অথবা RPC চ্যানেলের সাথে ম্যাপ করে।

একটি একক ম্যাপিং ফাইলে এক বা একাধিক SomeIpMapping সংজ্ঞা থাকে।

এসডিভি টাইপ ম্যাপিং

sdv_type_mapping হলো বিদ্যমান SDV টাইপগুলোর জন্য, যেগুলোকে আপনি SOME/IP নেটওয়ার্কে প্রকাশ করতে চান।

এসডিভি টাইপ ম্যাপিং কাঠামো

আপনাকে নির্দিষ্ট করে বলতে হবে:

  • unit_type : যে SDV টাইপটি ম্যাপ করা হচ্ছে ( package_name এবং type_name দ্বারা চিহ্নিত)।
  • someip_service_id : ১৬-বিটের SOME/IP সার্ভিস আইডি।
  • version_major এবং version_minor : SOME/IP পরিষেবার ভার্সনিং।
  • service_oriented_mapping : নির্দিষ্ট ম্যাপিং আচরণ সংজ্ঞায়িত করে (হয় একটি RPC ইন্টারফেসের জন্য অথবা একটি পাবলিকেশনের জন্য)।

প্রকাশনা ম্যাপিং উদাহরণ

আপনার SDV টাইপ যদি একটি টপিক (পাবলিকেশন) হয়, তাহলে publication_mapping ব্যবহার করুন। এটি ডেটার কাঠামো ( type_definition ) এবং SOME/IP ইভেন্ট আইডি বা ইভেন্টগ্রুপ আইডি-কে ম্যাপ করে, এবং এরপর নির্দিষ্ট 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
      }
    }
  }
}

RPC ইন্টারফেস ম্যাপিং উদাহরণ

আপনার SDV টাইপ যদি একটি RPC ইন্টারফেস হয়, তাহলে 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 টপিক এবং চ্যানেলের সাথে ম্যাপ হবে। এটি ইভেন্ট এবং RPC-এর জটিল প্যারামিটারযুক্ত ম্যাপিংয়ের সুযোগ দেয়।

SOME/IP পরিষেবা ম্যাপিং কাঠামো

  • someip_service_id , version_major , version_minor : SOME/IP সার্ভিসটি শনাক্ত করুন।
  • sd_behavior (ঐচ্ছিক): সার্ভিস ডিসকভারি আচরণ নির্ধারণ করে ( EXACT_OR_ANY_MINOR_VERSION অথবা MINIMUM_MINOR_VERSION )

  • instance : নির্দিষ্ট SOME/IP instance_id ইনস্ট্যান্সগুলোর জন্য SDV সার্ভিস ইউনিট এবং টপিকগুলোকে প্যারামিটারাইজ করে।

  • instance_impl : ইনস্ট্যান্সটির বাস্তবায়ন বর্ণনা করে, যা ইভেন্ট বা মেথডগুলোকে প্যারামিটারাইজড সার্ভিস ইউনিটের সাথে ম্যাপ করে।

ইভেন্ট ম্যাপিং উদাহরণ

এই উদাহরণটি একটি SOME/IP ইভেন্টকে একটি SDV টপিকে ম্যাপ করে। এটি ID 1-কে speed_sensor_unit লিটারেল স্ট্রিং-এর সাথে ম্যাপ করতে instance ব্যবহার করে।

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

আরপিসি ম্যাপিং উদাহরণ

এই উদাহরণটি একটি SOME/IP RPC সার্ভিসকে একটি SDV RPC ইন্টারফেসের সাথে ম্যাপ করে। ইভেন্ট ম্যাপিংয়ের মতোই, সার্ভিসটি সার্ভিস ইউনিটের নাম প্যারামিটারাইজ করার জন্য `instance` ব্যবহার করে। এটি SDV-তে থাকা RPC চ্যানেলের নামের সাথে সঙ্গতিপূর্ণ। এরপর instance_impl ব্লকটি SOME/IP method_id কে SDV প্রসিডিউরের নামের সাথে লিঙ্ক করার জন্য 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 ফায়ার অ্যান্ড ফরগেট (F&F) মেথডগুলোর SDV RPC ইন্টারফেসে কোনো সরাসরি সমতুল্য নেই। এর পরিবর্তে, publication_mapping ব্যবহার করে একটি SDV টপিককে (পাবলিকেশন) F&F মেথডের সাথে ম্যাপ করার মাধ্যমে এগুলোকে আহ্বান করা হয়। যখন সংশ্লিষ্ট SDV টপিকে ডেটা পাবলিশ করা হয়, তখন ব্রোকার সেটিকে একটি SOME/IP F&F মেথড কলে রূপান্তরিত করে।

এটি কনফিগার করতে, আপনাকে অবশ্যই 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
        }
      }
    }
  }
}