SOME/IP マッピング ファイルを作成する

このドキュメントでは、SOME/IP マッピング ファイルの作成について説明します。SOME/IP マッピング ファイルは、SDV サービスと SOME/IP サービスのマッピング方法を定義し、SDV ECU と非 SDV ECU 間の通信を容易にします。

some_ip_mapping ファイル内の VsidlEntry メッセージ内の .vsidl フィールドには、SOME/IP マッピング情報が含まれています。some_ip_mapping フィールドを使用すると、SDV サービス定義とは別に SOME/IP マッピングを定義できます。

SomeIp Mapping プロトコルには、SDV ECU と SOME/IP ECU 間の変換に必要なすべての情報が含まれています。 このプロトコルは、SOME/IP サービスを SDV エコシステムにマッピングすることも、SDV サービスユニットを AUTOSAR エコシステムにマッピングすることもできます。

基本コンセプト

マッピング ファイルを作成する前に、次の主要な識別子とコンセプトを理解してください。

  • SDV 完全修飾インスタンス名(FQIN): SDV サービス インスタンスを識別する一意の文字列。VM 名、パッケージ名、サービス名、インスタンス名で構成されます。

  • SDV タイプ: SDV メッセージ ペイロードのデータ形式の一意の識別子で、プロトコル メッセージに対応します。

  • SOME/IP ServiceIdentifier(SOME/IP SID): サービス ID(uint16)、インスタンス ID(uint16)、メジャー バージョン(uint8)、マイナー バージョン(uint32)の組み合わせで SOME/IP サービスを一意に識別します。

  • SDV RPC: SDV サービスによって提供されるメソッド。method name(文字列)、包含する Typechannel 名で識別されます。

  • SDV Pub/Sub: SDV サービスによって公開またはサブスクライブされるトピック。TypeTopic 名で識別されます。

  • SOME/IP RPC: サービス ID、インスタンス ID、メソッド ID(uint16)で識別されます。

  • SOME/IP イベント: Pub/Sub 用に SOME/IP サービスによって公開され、サービス ID、インスタンス ID、イベント ID(uint16)で識別され、イベント グループ(uint16)に属します。

  • SOME/IP ブローカー: SDV のブリッジング コンポーネント。SOME/IP マッピング ファイルを使用して、SDV サービスと SOME/IP サービス間の通信を可能にします。

ファイル構造と場所

SOME/IP マッピング情報は、.vsidl ファイルの VsidlEntry メッセージ内の繰り返しフィールド 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 ネットワーク プロトコル間の変換を定義する定義が含まれています。マッピングは、次の 2 つの主な方法で定義できます。

  • sdv_type_mapping: SDV タイプ(RPC インターフェースや公開トピックなど)を SOME/IP サービスにマッピングします。
  • someip_service_mapping: 未加工の SOME/IP サービス(とそのインスタンス、イベント、メソッド)を SDV Pub/Sub トピックまたは RPC チャネルにマッピングします。

1 つのマッピング ファイルは、1 つ以上の SomeIpMapping 定義で構成されます。

SDV タイプ マッピング

sdv_type_mapping は、SOME/IP ネットワークに公開する既存の SDV タイプ用です。

SDV タイプ マッピングの構造

次の指定が必要です。

  • unit_type: マッピングされる SDV タイプ(package_nametype_name で識別されます)。
  • someip_service_id: 16 ビットの SOME/IP サービス ID。
  • version_majorversion_minor: SOME/IP サービスのバージョン管理。
  • service_oriented_mapping: 特定のマッピング動作(RPC インターフェースまたは公開用)を定義します。

公開マッピングの例

SDV タイプがトピック(公開)の場合は、publication_mapping を使用します。これにより、データの構造(type_definition)と SOME/IP イベント ID または EventGroup ID がマッピングされ、特定の 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_idversion_majorversion_minor: SOME/IP サービスを識別します。
  • sd_behavior(省略可): サービス ディスカバリの動作(EXACT_OR_ANY_MINOR_VERSION または MINIMUM_MINOR_VERSION)を定義します。

  • instance: 特定の SOME/IP instance_id インスタンスの SDV サービスユニットとトピックをパラメータ化します。

  • instance_impl: インスタンスの実装について説明し、イベントまたはメソッドをパラメータ化されたサービスユニットにマッピングします。

イベント マッピングの例

この例では、SOME/IP イベントを SDV トピックにマッピングします。instance を使用して、ID 1 をリテラル文字列 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) ...
        }
      }
    }
  }
}

RPC マッピングの例

この例では、SOME/IP RPC サービスを SDV RPC インターフェースにマッピングします。イベント マッピングと同様に、サービスはインスタンスを使用してサービスユニット名をパラメータ化します。これは、SDV の RPC チャネル名に対応します。instance_impl ブロックは、SOME/IP method_id を SDV プロシージャ名にリンクする offered_interface のインスタンスを定義します。

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 を使用すると、1 つの 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 インターフェースに直接対応するものはありません。代わりに、publication_mapping を使用して SDV トピック(公開)を F&F メソッドにマッピングすることで呼び出されます。データが対応する SDV トピックに公開されると、ブローカーはそれを SOME/IP F&F メソッド呼び出しに変換します。

これを構成するには、offered_topic ブロック内で someip_ff_methods: true を設定し、topic_mapping 内に宛先 fire_and_forget_method のルーティングの詳細を指定する必要があります。

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
        }
      }
    }
  }
}