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

このページでは、VSIDL で SOME/IP マッピング ファイルを作成する手順について説明します。SOME/IP マッピング ファイルは、AAOS SDV サービスが AUTOSAR SOME/IP サービス インターフェース(システム ARXML または vsomeip 構成で定義された service_idinstance_ideventgroup_idmethod_id)にマッピングされる方法を定義し、SDV 仮想マシンと外部車両 ECU 間の双方向通信を可能にします。

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

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

基本コンセプト

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

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

  • SDV タイプ: この名前は、SDV メッセージ ペイロードのデータ形式の一意の識別子であり、proto メッセージに対応しています。

  • 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 サービス間の通信を可能にするために SOME/IP マッピング ファイルを使用する SDV のブリッジング コンポーネント。

ファイル構造と場所

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 では、単一の 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
        }
      }
    }
  }
}