Tài liệu này hướng dẫn bạn cách ghi tệp ánh xạ SOME/IP. Tệp ánh xạ SOME/IP xác định cách các dịch vụ SDV ánh xạ đến các dịch vụ SOME/IP và ngược lại, tạo điều kiện giao tiếp giữa các ECU SDV và không phải SDV.
Trường some_ip_mapping trong thông báo VsidlEntry trong tệp .vsidl chứa thông tin ánh xạ SOME/IP. Trường some_ip_mapping cho phép bạn xác định các ánh xạ SOME/IP riêng biệt với các định nghĩa dịch vụ SDV.
Proto SomeIp Mapping chứa tất cả thông tin mà trình môi giới SOME/IP cần để chuyển đổi giữa các ECU SDV và SOME/IP. Proto này có thể ánh xạ một dịch vụ SOME/IP vào hệ sinh thái SDV hoặc các đơn vị dịch vụ SDV vào hệ sinh thái AUTOSAR.
Các khái niệm chính
Trước khi ghi tệp ánh xạ, hãy tìm hiểu các giá trị nhận dạng và khái niệm chính sau:
Tên thực thể đủ điều kiện (FQIN) SDV: Chuỗi duy nhất này xác định các thực thể dịch vụ SDV. Chuỗi này bao gồm tên máy ảo, tên gói, tên dịch vụ và tên thực thể.
Loại SDV: Tên này là giá trị nhận dạng duy nhất cho định dạng dữ liệu của tải trọng thông báo SDV và tương ứng với một thông báo proto.
SOME/IP
ServiceIdentifier(SID SOME/IP): Xác định duy nhất các dịch vụ SOME/IP bằng cách kết hợp mã dịch vụ (uint16), mã thực thể (uint16), phiên bản lớn (uint8) và phiên bản nhỏ (uint32).SDV RPC: Các phương thức do dịch vụ SDV cung cấp, được xác định bằng
method name(chuỗi),Typechứa và tênchannel.SDV Pub/Sub: Các chủ đề được dịch vụ SDV xuất bản hoặc đăng ký và được xác định bằng tên
TypevàTopicSOME/IP RPC: Được xác định bằng mã dịch vụ, mã thực thể và mã phương thức (
uint16).Sự kiện SOME/IP: Được xuất bản bởi các dịch vụ SOME/IP cho Pub/Sub và được xác định bằng mã dịch vụ, mã thực thể, mã sự kiện (
uint16) và thuộc về một nhóm sự kiện (uint16).Trình môi giới SOME/IP: Một thành phần cầu nối trong SDV sử dụng tệp ánh xạ SOME/IP để cho phép giao tiếp giữa các dịch vụ SDV và SOME/IP.
Cấu trúc và vị trí tệp
Thông tin ánh xạ SOME/IP được đưa vào dưới dạng trường lặp lại, some_ip_mapping, trong thông báo VsidlEntry trong tệp .vsidl. Điều này cho phép xác định các ánh xạ SOME/IP riêng biệt với các định nghĩa dịch vụ SDV, giúp bạn quản lý các ánh xạ trong một tệp riêng.
// 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;
}
Tạo tệp ánh xạ
Tệp ánh xạ SOME/IP thường chứa các định nghĩa chuyển đổi giữa hệ sinh thái SDV và giao thức mạng SOME/IP. Bạn có thể xác định các ánh xạ theo 2 cách chính:
sdv_type_mapping: Ánh xạ một loại SDV (chẳng hạn như giao diện RPC hoặc chủ đề xuất bản) đến một dịch vụ SOME/IP.someip_service_mapping: Ánh xạ một dịch vụ SOME/IP thô (và các thực thể, sự kiện hoặc phương thức của dịch vụ đó) đến các chủ đề Pub/Sub SDV hoặc kênh RPC.
Một tệp ánh xạ bao gồm một hoặc nhiều định nghĩa SomeIpMapping.
Ánh xạ loại SDV
sdv_type_mapping dành cho các loại SDV hiện có mà bạn muốn hiển thị cho mạng SOME/IP.
Cấu trúc ánh xạ loại SDV
Bạn cần chỉ định:
unit_type: Loại SDV đang được ánh xạ (được xác định bằngpackage_namevàtype_name).someip_service_id: Mã dịch vụ SOME/IP 16 bit.version_majorvàversion_minor: Phiên bản của dịch vụ SOME/IP.service_oriented_mapping: Xác định hành vi ánh xạ cụ thể (đối với giao diện RPC hoặc ấn phẩm).
Ví dụ về ánh xạ ấn phẩm
Nếu loại SDV của bạn là một chủ đề (ấn phẩm), hãy sử dụng publication_mapping. Điều này ánh xạ cấu trúc của dữ liệu (type_definition) và Mã sự kiện SOME/IP hoặc Mã EventGroup, sau đó ánh xạ các chủ đề SDV cụ thể đến các thực thể 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
}
}
}
}
Ví dụ về ánh xạ giao diện RPC
Nếu loại SDV của bạn là giao diện RPC, hãy sử dụng rpc_interface_mapping.
Ánh xạ tên quy trình SDV đến các thực thể method_id SOME/IP và liên kết các kênh SDV với các thực thể 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
}
}
}
}
Ánh xạ dịch vụ SOME/IP
someip_service_mapping định cấu hình cách một dịch vụ SOME/IP cụ thể (được phát hiện hoặc cung cấp trên mạng) ánh xạ lên các chủ đề và kênh SDV. Điều này cho phép ánh xạ các sự kiện và RPC được tham số hoá phức tạp.
Cấu trúc ánh xạ dịch vụ SOME/IP
someip_service_id,version_major,version_minor: Xác định dịch vụ SOME/IP.sd_behavior(không bắt buộc): Xác định hành vi phát hiện dịch vụ (EXACT_OR_ANY_MINOR_VERSIONhoặcMINIMUM_MINOR_VERSION)instance: Tham số hoá các đơn vị và chủ đề dịch vụ SDV cho các thực thể SOME/IPinstance_idcụ thể.instance_impl: Mô tả việc triển khai thực thể, ánh xạ các sự kiện hoặc phương thức đến các đơn vị dịch vụ được tham số hoá.
Ví dụ về ánh xạ sự kiện
Ví dụ này ánh xạ một sự kiện SOME/IP vào một chủ đề SDV. Ví dụ này sử dụng instance để ánh xạ mã 1 đến chuỗi ký tự 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) ...
}
}
}
}
}
Ví dụ về ánh xạ RPC
Ví dụ này ánh xạ một dịch vụ RPC SOME/IP đến một giao diện RPC SDV. Tương tự như ánh xạ sự kiện, dịch vụ này sử dụng thực thể để tham số hoá tên đơn vị dịch vụ. Điều này tương ứng với tên kênh RPC trong SDV. Sau đó, khối instance_impl sẽ xác định một thực thể offered_interface để liên kết method_id SOME/IP với tên quy trình 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
}
}
}
}
Các tính năng nâng cao
Phần này mô tả các tính năng nâng cao được ánh xạ SOME/IP hỗ trợ.
Sự kiện cho nhóm
group_event cho phép chia tách và ánh xạ một sự kiện SOME/IP duy nhất đến nhiều chủ đề SDV cùng một lúc. Bạn có thể thực hiện việc này bằng cách chỉ định nhiều mục event_part và sử dụng field_name_mapping để ánh xạ tên trường tải trọng SOME/IP đến tên trường tải trọng 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"
}
}
}
}
Ánh xạ "bắn và quên"
Các phương thức "bắn và quên" (F&F) SOME/IP không có phương thức tương đương trực tiếp trong các giao diện RPC SDV. Thay vào đó, các phương thức này được gọi bằng cách ánh xạ một chủ đề SDV (ấn phẩm) đến phương thức F&F bằng publication_mapping. Khi dữ liệu được xuất bản lên chủ đề SDV tương ứng, trình môi giới sẽ chuyển đổi dữ liệu đó thành một lệnh gọi phương thức F&F SOME/IP.
Để định cấu hình tính năng này, bạn phải đặt someip_ff_methods: true trong khối offered_topic và cung cấp thông tin chi tiết về định tuyến fire_and_forget_method đích bên trong 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
}
}
}
}
}