このページでは、VSIDL で SOME/IP マッピング ファイルを作成する手順について説明します。SOME/IP マッピング ファイルは、AAOS SDV サービスが AUTOSAR SOME/IP サービス インターフェース(システム ARXML または vsomeip 構成で定義された service_id、instance_id、eventgroup_id、method_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(文字列)、包含するType、channel名で識別されます。SDV Pub/Sub: SDV サービスによって公開またはサブスクライブされ、
TypeとTopicの名前で識別されるトピック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_nameとtype_nameで識別)。someip_service_id: 16 ビットの SOME/IP サービス ID。version_majorとversion_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_id、version_major、version_minor: SOME/IP サービスを識別します。sd_behavior(省略可): サービス ディスカバリの動作(EXACT_OR_ANY_MINOR_VERSIONまたはMINIMUM_MINOR_VERSION)を定義します。instance: 特定の SOME/IPinstance_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
}
}
}
}
}