SOME/IP 매핑 파일 작성

이 문서에서는 SOME/IP 매핑 파일을 작성하는 방법을 안내합니다. SOME/IP 매핑 파일은 SDV 서비스가 SOME/IP 서비스에 매핑되는 방식과 그 반대의 방식을 정의하여 SDV와 비 SDV ECU 간의 통신을 용이하게 합니다.

some_ip_mapping 필드VsidlEntry 메시지 내 .vsidl 파일에 SOME/IP 매핑 정보가 포함되어 있습니다. some_ip_mapping 필드를 사용하면 SDV 서비스 정의와 별도로 SOME/IP 매핑을 정의할 수 있습니다.

SomeIp Mapping proto에는 SOME/IP 브로커가 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: method name(문자열), 포함된 Type, channel 이름으로 식별되는 SDV 서비스에서 제공하는 메서드입니다.

  • 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 매핑 정보는 반복 필드인 some_ip_mapping으로 VsidlEntry 메시지 내에 .vsidl 파일에 포함됩니다. 이렇게 하면 SDV 서비스 정의와 별도로 SOME/IP 매핑을 정의할 수 있으므로 전용 파일에서 매핑을 관리할 수 있습니다.

// 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 서비스 (및 인스턴스, 이벤트 또는 메서드)를 SDV Pub/Sub 주제 또는 RPC 채널에 매핑합니다.

단일 매핑 파일은 하나 이상의 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_id, version_major, version_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
        }
      }
    }
  }
}