يرشدك هذا المستند إلى كيفية كتابة ملف ربط SOME/IP. يحدّد ملف ربط SOME/IP كيفية ربط خدمات SDV بخدمات SOME/IP والعكس، ما يسهّل التواصل بين وحدات التحكّم الإلكترونية (ECU) المتوافقة مع SDV وغير المتوافقة معها.
يحتوي some_ip_mapping الحقل ضمن الرسالة VsidlEntry في ملف .vsidl
على معلومات الربط SOME/IP. يتيح لك الحقل some_ip_mapping تحديد عمليات ربط SOME/IP بشكل منفصل عن تعريفات خدمة SDV.
يحتوي SomeIp Mapping proto على جميع المعلومات التي يحتاجها وسيط SOME/IP لإجراء عمليات التحويل بين وحدات التحكّم الإلكترونية (ECU) المستندة إلى SOME/IP والمركبات المحدّدة بالبرامج (SDV). ويمكن أن يربط هذا البروتوكول إما خدمة SOME/IP بنظام SDV المتكامل أو وحدات خدمة SDV بنظام AUTOSAR المتكامل.
المفاهيم الأساسية
قبل كتابة ملف الربط، تعرَّف على هذه المعرّفات والمفاهيم الأساسية:
اسم مثيل مؤهَّل بالكامل (FQIN) لخدمة SDV: تحدّد هذه السلسلة الفريدة مثيلات خدمة SDV، وهي تتألف من اسم الجهاز الافتراضي واسم الحزمة واسم الخدمة واسم المثيل.
نوع SDV: هذا الاسم هو معرّف فريد لتنسيق بيانات حمولة رسالة SDV ويتوافق مع رسالة أولية.
SOME/IP
ServiceIdentifier(SOME/IP SID): يحدّد بشكل فريد خدمات SOME/IP من خلال مجموعة من معرّف الخدمة (uint16) ومعرّف المثيل (uint16) ورقم الإصدار الرئيسي (uint8) ورقم الإصدار الثانوي (uint32).استدعاء الإجراء عن بُعد (RPC) في "مساحة تطوير آمنة" (SDV): هي الطرق التي تقدّمها خدمات "مساحة تطوير آمنة"، ويتم تحديدها من خلال
method name(سلسلة) وTypeالذي يحتوي عليها واسمchannel.SDV Pub/Sub: المواضيع التي تنشرها خدمات SDV أو تشترك فيها، ويتم تحديدها من خلال الاسم
TypeوTopicSOME/IP RPC: يتم تحديدها من خلال معرّف الخدمة ومعرّف المثيل ومعرّف الطريقة (
uint16).أحداث SOME/IP: تنشرها خدمات SOME/IP في Pub/Sub ويتم تحديدها من خلال رقم تعريف الخدمة ورقم تعريف المثيل ورقم تعريف الحدث (
uint16) وتنتمي إلى مجموعة أحداث (uint16).وسيط SOME/IP: هو أحد مكونات الربط في SDV التي تستهلك ملف ربط SOME/IP لإتاحة التواصل بين خدمات SDV وSOME/IP.
بنية الملف وموقعه
يتم تضمين معلومات الربط بين SOME/IP وSDV كحقل متكرّر، some_ip_mapping، ضمن رسالة VsidlEntry في ملف .vsidl. يتيح ذلك تحديد عمليات الربط بين SOME/IP وSDV بشكل منفصل عن تعريفات خدمة 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 أولية (ومثيلاتها أو أحداثها أو طرقها) بمواضيع SDV Pub/Sub أو قنوات RPC.
يتكوّن ملف الربط الفردي من تعريف واحد أو أكثر من تعريفات SomeIpMapping.
ربط أنواع SDV
يُستخدَم sdv_type_mapping مع أنواع SDV الحالية التي تريد عرضها على شبكة SOME/IP.
بنية ربط نوع القيم الحساسة
عليك تحديد ما يلي:
-
unit_type: نوع SDV الذي يتم ربطه (يتم تحديده من خلالpackage_nameوtype_name). -
someip_service_id: معرّف خدمة SOME/IP المكوّن من 16 بت -
version_majorوversion_minor: إصدار خدمة SOME/IP.
service_oriented_mapping: يحدّد سلوك الربط المحدّد (إما لواجهة RPC أو منشور).
مثال على عملية الربط بين جهة النشر والمنتج
إذا كان نوع بيانات SDV هو موضوع (منشور)، استخدِم 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
}
}
}
}
مثال على ربط واجهة 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: يحدّد مَعلمات وحدات خدمة SDV ومواضيعها لحالاتinstance_idمعيّنة من SOME/IP.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 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 لربط أسماء حقول حمولة 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 fire and forget (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
}
}
}
}
}