یک فایل نقشه برداری SOME/IP بنویسید

این سند شما را در نوشتن یک فایل نگاشت SOME/IP راهنمایی می‌کند. یک فایل نگاشت SOME/IP نحوه نگاشت سرویس‌های SDV به سرویس‌های SOME/IP و برعکس را تعریف می‌کند و ارتباط بین ECUهای SDV و غیر SDV را تسهیل می‌کند.

فیلد some_ip_mapping در پیام VsidlEntry در فایل .vsidl شما حاوی اطلاعات نگاشت SOME/IP است. فیلد some_ip_mapping به شما امکان می‌دهد نگاشت‌های SOME/IP را جدا از تعاریف سرویس SDV تعریف کنید.

پروتوتایپ SomeIp Mapping شامل تمام اطلاعاتی است که کارگزار SOME/IP برای تبدیل بین ECUهای SDV و SOME/IP به آن نیاز دارد. این پروتوتایپ می‌تواند یک سرویس SOME/IP را به اکوسیستم SDV یا واحدهای سرویس SDV را به اکوسیستم AUTOSAR نگاشت کند.

مفاهیم اصلی

قبل از نوشتن فایل نگاشت خود، این شناسه‌ها و مفاهیم کلیدی را درک کنید:

  • نام نمونه کاملاً واجد شرایط SDV (FQIN): این رشته منحصر به فرد، نمونه‌های سرویس SDV را شناسایی می‌کند. این رشته از نام ماشین مجازی، نام بسته، نام سرویس و نام نمونه تشکیل شده است.

  • نوع SDV: این نام یک شناسه منحصر به فرد برای قالب داده یک محموله پیام SDV است و مربوط به یک پیام اولیه است.

  • ServiceIdentifier SOME/IP (SOME/IP SID): سرویس‌های SOME/IP را به طور منحصر به فرد با ترکیبی از شناسه سرویس ( uint16 )، شناسه نمونه ( uint16 )، نسخه اصلی ( uint8 ) و نسخه فرعی ( uint32 ) شناسایی می‌کند.

  • SDV RPC: روش‌های ارائه شده توسط سرویس‌های SDV، که با method name (رشته)، Type شامل آن و نام channel شناسایی می‌شوند.

  • انتشار/زیرمجموعه SDV: موضوعاتی که توسط سرویس‌های SDV منتشر یا مشترک شده‌اند و با نام Type و Topic مشخص می‌شوند.

  • SOME/IP RPC: با شناسه سرویس، شناسه نمونه و شناسه متد ( uint16 ) شناسایی می‌شود.

  • رویدادهای SOME/IP: توسط سرویس‌های SOME/IP برای Pub/Sub منتشر می‌شوند و با شناسه سرویس، شناسه نمونه، شناسه رویداد ( uint16 ) و تعلق به یک گروه رویداد ( uint16 ) شناسایی می‌شوند.

  • کارگزار SOME/IP: یک مؤلفه پل‌ساز در SDV که از فایل نگاشت SOME/IP برای فعال کردن ارتباط بین SDV و سرویس‌های SOME/IP استفاده می‌کند.

ساختار و محل فایل

اطلاعات نگاشت SOME/IP به عنوان یک فیلد تکراری، some_ip_mapping ، در پیام VsidlEntry در فایل .vsidl شما گنجانده شده است. این امر به نگاشت‌های SOME/IP اجازه می‌دهد تا جدا از تعاریف سرویس SDV تعریف شوند و شما را قادر می‌سازد نگاشت‌ها را در یک فایل اختصاصی مدیریت کنید.

// 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 (و نمونه‌ها، رویدادها یا متدهای آن) را به موضوعات Pub/Sub مربوط به SDV یا کانال‌های RPC نگاشت می‌کند.

یک فایل نگاشت واحد شامل یک یا چند تعریف SomeIpMapping است.

نگاشت نوع SDV

sdv_type_mapping برای انواع SDV موجود است که می‌خواهید در شبکه SOME/IP نمایش دهید.

ساختار نگاشت نوع SDV

شما باید مشخص کنید:

  • unit_type : نوع SDV که نگاشت می‌شود (با package_name ) و type_name ) شناسایی می‌شود).
  • someip_service_id : شناسه سرویس ۱۶ بیتی SOME/IP.
  • version_major و version_minor : نسخه‌بندی سرویس SOME/IP.
  • service_oriented_mapping : رفتار خاص نگاشت (یا برای یک رابط RPC یا یک انتشار) را تعریف می‌کند.

مثال نقشه برداری از انتشارات

اگر نوع SDV شما یک موضوع (publication) است، publication_mapping استفاده کنید. این دستور ساختار داده‌ها ( type_definition ) و شناسه رویداد SOME/IP یا شناسه گروه رویداد (EventGroup ID) را نگاشت می‌کند و به دنبال آن موضوعات خاص 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 را به نمونه‌های method_id SOME/IP نگاشت کنید و کانال‌های 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 : واحدها و موضوعات سرویس SDV را برای نمونه‌های خاص SOME/IP instance_id پارامتری می‌کند.

  • instance_impl : پیاده‌سازی نمونه را شرح می‌دهد و رویدادها یا متدها را به واحدهای سرویس پارامتری نگاشت می‌کند.

مثال نگاشت رویداد

این مثال یک رویداد SOME/IP را به یک موضوع SDV نگاشت می‌کند. instance برای نگاشت شناسه ۱ به رشته تحت‌اللفظی 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 RPC را به یک رابط SDV RPC نگاشت می‌کند. مشابه نگاشت‌های رویداد، این سرویس از نمونه برای پارامتری کردن نام واحد سرویس استفاده می‌کند. این مربوط به نام کانال RPC در SDV است. سپس بلوک instance_impl یک نمونه از offered_interface را تعریف می‌کند تا شناسه method_id SOME/IP را به نام رویه SDV پیوند دهد:

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 برای نگاشت نام فیلدهای payload SOME/IP ورودی به نام‌های فیلد payload 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 ندارند. در عوض، آنها با نگاشت یک موضوع SDV (انتشار) به روش F&F با استفاده publication_mapping فراخوانی می‌شوند. هنگامی که داده‌ها در موضوع SDV مربوطه منتشر می‌شوند، کارگزار آن را به یک فراخوانی روش SOME/IP F&F ترجمه می‌کند.

برای پیکربندی این مورد، باید someip_ff_methods: true در بلوک offered_topic تنظیم کنید و جزئیات مسیریابی مقصد fire_and_forget_method را در داخل topic_mapping خود ارائه دهید.

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