This page guides you through writing a SOME/IP mapping file in VSIDL. Файл сопоставления SOME/IP определяет, как сервисы AAOS SDV сопоставляются с интерфейсами сервисов AUTOSAR SOME/IP (service_id, instance_id, eventgroup_id и method_id, определенные в системных конфигурациях ARXML или vsomeip), обеспечивая двунаправленную связь между виртуальными машинами SDV и внешними ЭБУ автомобиля.
Поле some_ip_mapping в сообщении VsidlEntry файла .vsidl содержит информацию о сопоставлении SOME/IP. Поле some_ip_mapping позволяет задавать сопоставления SOME/IP отдельно от определений сервисов SDV.
Файл SomeIp Mapping proto содержит всю информацию, необходимую брокеру SOME/IP для преобразования между SDV и блоками управления SOME/IP. Этот протокол может сопоставлять сервис SOME/IP с экосистемой SDV или блоки сервисов SDV с экосистемой AUTOSAR.
Основные понятия
Прежде чем создавать файл сопоставления, ознакомьтесь с основными идентификаторами и понятиями:
Полное имя экземпляра SDV (FQIN). Уникальная строка, которая идентифицирует экземпляры сервиса SDV. Оно состоит из названия виртуальной машины, названия пакета, названия сервиса и названия экземпляра.
Тип SDV. Уникальный идентификатор формата данных полезной нагрузки сообщения SDV, который соответствует сообщению proto.
SOME/IP
ServiceIdentifier(SOME/IP SID). Уникальный идентификатор сервисов SOME/IP, состоящий из идентификатора сервиса (uint16), идентификатора экземпляра (uint16), основной версии (uint8) и промежуточной версии (uint32).SDV RPC. Методы, предлагаемые сервисами SDV, которые идентифицируются по
method name(строка), содержащемуTypeи имениchannel.SDV Pub/Sub. Темы, опубликованные сервисами SDV или на которые они подписаны. Идентифицируются по названию
TypeиTopic.SOME/IP RPC. Идентифицируется по идентификатору сервиса, идентификатору экземпляра и идентификатору метода (
uint16).События SOME/IP. Публикуются сервисами SOME/IP для издателя-подписчика и идентифицируются по идентификатору сервиса, идентификатору экземпляра, идентификатору события (
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;
// Enables custom extensions beyond the standard VSIDL model.
repeated google.protobuf.Any extension = 3;
// SOMEIP mapping rules.
repeated sdv.someip.v1.SomeIpMapping some_ip_mapping = 4;
// VHAL mapping rules.
repeated VhalMapping vhal_mapping = 5;
// List of SDV service bundles defined in the file.
repeated ServiceBundle service_bundle = 6;
}
Создайте файл сопоставления
Файл сопоставления SOME/IP обычно содержит определения, которые преобразуют данные между экосистемой SDV и сетевым протоколом SOME/IP. Сопоставления можно задавать двумя основными способами:
sdv_type_mapping– сопоставляет тип SDV (например, интерфейс RPC или тему публикации) с сервисом SOME/IP.someip_service_mapping: сопоставляет необработанный сервис SOME/IP (и его экземпляры, события или методы) с темами издателя-подписчика SDV или каналами RPC.
Один файл сопоставления состоит из одного или нескольких определений 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 с экземплярами 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 и темы для определенных экземпляров SOME/IPinstance_id.instance_impl– описывает реализацию экземпляра, сопоставляя события или методы с параметризованными сервисными блоками.
Пример сопоставления событий
В этом примере событие SOME/IP сопоставляется с темой SDV. Для сопоставления идентификатора 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
В этом примере сервис 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
}
}
}
}
}