Как создать файл сопоставления SOME/IP

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/IP instance_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
        }
      }
    }
  }
}