Этот документ поможет вам создать файл сопоставления SOME/IP. Файл сопоставления SOME/IP определяет, как службы SDV сопоставляются со службами SOME/IP и наоборот, обеспечивая связь между ЭБУ SDV и не-SDV.
Поле some_ip_mapping в сообщении VsidlEntry вашего файла .vsidl содержит информацию о сопоставлении SOME/IP. Поле some_ip_mapping позволяет определять сопоставления SOME/IP отдельно от определений служб SDV.
Протокол SomeIp Mapping содержит всю информацию, необходимую брокеру SOME/IP для преобразований между блоками управления SDV и SOME/IP. Этот протокол может сопоставлять либо сервис SOME/IP с экосистемой SDV, либо сервисные блоки SDV с экосистемой AUTOSAR.
Основные концепции
Прежде чем создавать файл сопоставления, необходимо усвоить следующие ключевые идентификаторы и понятия:
Полное имя экземпляра SDV (FQIN): Эта уникальная строка идентифицирует экземпляры службы SDV. Она состоит из имени виртуальной машины, имени пакета, имени службы и имени экземпляра.
Тип SDV: Это имя является уникальным идентификатором формата данных полезной нагрузки сообщения SDV и соответствует прототипу сообщения.
ServiceIdentifierSOME/IP (SOME/IP SID): однозначно идентифицирует службы SOME/IP с помощью комбинации идентификатора службы (uint16), идентификатора экземпляра (uint16), основной версии (uint8) и дополнительной версии (uint32).SDV 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 включена в сообщение VsidlEntry в вашем файле .vsidl в виде повторяющегося поля some_ip_mapping . Это позволяет определять сопоставления 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 или каналами RPC SDV.
Один файл сопоставления содержит одно или несколько определений SomeIpMapping .
сопоставление типов SDV
sdv_type_mapping предназначен для существующих типов SDV, которые вы хотите предоставить сети SOME/IP.
Структура сопоставления типов SDV
Необходимо указать:
-
unit_type: Тип SDV, который сопоставляется (идентифицируется поpackage_nameиtype_name). -
someip_service_id: 16-битный идентификатор службы 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 с экземплярами 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 для конкретных экземпляровinstance_idс определенным IP-адресом.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) ...
}
}
}
}
}
Пример сопоставления RPC
В этом примере сопоставляется RPC-сервис SOME/IP с RPC-интерфейсом SDV. Аналогично сопоставлению событий, сервис использует экземпляр для параметризации имени сервисного блока. Это соответствует имени 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 типа «отправь и забудь» (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
}
}
}
}
}