หน้านี้จะแนะนำวิธีเขียนไฟล์การแมป SOME/IP ใน VSIDL ไฟล์การแมป SOME/IP
จะกำหนดวิธีที่บริการ SDV ของ AAOS แมปกับอินเทอร์เฟซบริการ SOME/IP ของ AUTOSAR (service_id, instance_id, eventgroup_id และ method_id
ที่กำหนดไว้ใน ARXML ของระบบหรือการกำหนดค่า vsomeip) ซึ่งจะช่วยให้การสื่อสารแบบ 2 ทิศทาง
ระหว่างเครื่องเสมือน SDV และ ECU ของยานพาหนะภายนอกเป็นไปได้
some_ip_mapping ฟิลด์ภายในข้อความ VsidlEntry ในไฟล์ .vsidl
มีข้อมูลการแมป SOME/IP ฟิลด์ some_ip_mapping ช่วยให้คุณกำหนดการแมป SOME/IP แยกต่างหากจากคำจำกัดความของบริการ SDV
SomeIp Mapping proto มีข้อมูลทั้งหมดที่นายหน้า SOME/IP ต้องการ
สำหรับการแปลงระหว่าง SDV กับ ECU ของ SOME/IP Proto นี้สามารถแมป
บริการ SOME/IP เข้าสู่ระบบนิเวศ SDV หรือหน่วยบริการ SDV เข้าสู่ระบบนิเวศ AUTOSAR
แนวคิดหลัก
ก่อนเขียนไฟล์การแมป โปรดทำความเข้าใจตัวระบุและแนวคิดสำคัญต่อไปนี้
ชื่ออินสแตนซ์แบบสมบูรณ์ (FQIN) ของ SDV: สตริงที่ไม่ซ้ำนี้ระบุอินสแตนซ์บริการ SDV ซึ่งประกอบด้วยชื่อ VM, ชื่อแพ็กเกจ, ชื่อบริการ และชื่ออินสแตนซ์
ประเภท SDV: ชื่อนี้เป็นตัวระบุที่ไม่ซ้ำกันสำหรับรูปแบบข้อมูลของ เพย์โหลดข้อความ SDV และสอดคล้องกับข้อความ Proto
SOME/IP
ServiceIdentifier(SOME/IP SID): ระบุบริการ SOME/IP ที่ไม่ซ้ำกันด้วยการรวมรหัสบริการ (uint16), รหัสอินสแตนซ์ (uint16), เวอร์ชันหลัก (uint8) และเวอร์ชันย่อย (uint32)RPC ของ SDV: เมธอดที่บริการ SDV มีให้ ซึ่งระบุโดย
method name(string),Typeที่มี และชื่อchannelSDV Pub/Sub: หัวข้อที่เผยแพร่หรือสมัครใช้บริการโดยบริการ SDV และ ระบุด้วยชื่อ
TypeและTopicRPC ของ SOME/IP: ระบุโดยรหัสบริการ รหัสอินสแตนซ์ และรหัสเมธอด (
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 คุณกำหนดการแมปได้ 2 วิธีหลักๆ ดังนี้
sdv_type_mapping: แมปประเภท SDV (เช่น อินเทอร์เฟซ RPC หรือ หัวข้อการเผยแพร่) กับบริการ SOME/IPsomeip_service_mapping: แมปบริการ SOME/IP ดิบ (และอินสแตนซ์ เหตุการณ์ หรือเมธอด) กับหัวข้อ Pub/Sub ของ SDV หรือช่อง RPC
ไฟล์การแมปเดียวประกอบด้วยSomeIpMappingอย่างน้อย 1 รายการ
การแมปประเภท SDV
sdv_type_mapping ใช้สำหรับประเภท SDV ที่มีอยู่ซึ่งคุณต้องการแสดงต่อเครือข่าย SOME/IP
โครงสร้างการแมปประเภท SDV
คุณต้องระบุสิ่งต่อไปนี้
unit_type: ประเภท SDV ที่กำลังแมป (ระบุโดยpackage_nameและtype_name)someip_service_id: รหัสบริการ SOME/IP แบบ 16 บิตversion_majorและversion_minor: การกำหนดเวอร์ชันของบริการ SOME/IPservice_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/IPsd_behavior(ไม่บังคับ): กำหนดลักษณะ Service Discovery (EXACT_OR_ANY_MINOR_VERSIONหรือMINIMUM_MINOR_VERSION)instance: กำหนดพารามิเตอร์หน่วยบริการและหัวข้อ SDV สำหรับอินสแตนซ์ SOME/IPinstance_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 RPC กับอินเทอร์เฟซ SDV RPC บริการจะใช้อินสแตนซ์เพื่อกำหนดพารามิเตอร์ชื่อหน่วยบริการ ซึ่งคล้ายกับ
การแมปเหตุการณ์
ซึ่งสอดคล้องกับชื่อช่อง RPC ใน SDV จากนั้นบล็อก instance_impl
จะกำหนดอินสแตนซ์ของ offered_interface เพื่อลิงก์ SOME/IP method_id กับ
ชื่อขั้นตอน 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
}
}
}
}
}