Написать файл сопоставления SOME/IP

Этот документ поможет вам создать файл сопоставления 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 и соответствует прототипу сообщения.

  • ServiceIdentifier SOME/IP (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 для 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
        }
      }
    }
  }
}