SOME/IP 유형 정의 작성

VSIDL에서 확장 가능한 서비스 지향 미들웨어 over IP (SOME/IP) 매핑을 정의할 때 SOME/IP 페이로드의 구조를 설명합니다. 기본 요소, 문자열, 배열, 복합 구조체를 모델링할 수 있는 SomeIpType 메시지를 사용하여 구조를 설명합니다.

이 페이지에서는 이벤트 및 메서드 매핑을 위한 type_definition 블록에서 사용되는 SomeIpStruct 유형 정의를 작성하는 방법을 중점적으로 설명합니다.

SomeIpStruct 메시지

SomeIpStruct 메시지는 여러 필드로 구성된 구조화된 SOME/IP 페이로드를 나타냅니다. 여기에 정의된 구조는 SOME/IP 브로커에서 원시 SOME/IP 바이트와 SDV protobuf 메시지의 필드 간에 변환하는 데 사용됩니다.

구조체를 정의할 때는 두 가지 기본 속성을 구성합니다.

  • length_field_size (선택사항): 직렬화된 페이로드에서 구조체 앞에 오는 길이 필드의 크기 (바이트)를 지정합니다. LengthFieldSize enum의 사용된 값에는 ZERO (길이 필드 없음), ONE, TWO, FOUR가 포함됩니다.
  • field (반복됨): 구조체를 구성하는 필드 목록입니다.

구조체 필드 정의

SomeIpStruct 내부의 각 필드에는 다음이 필요합니다.

  • field_name: 필드의 이름입니다. 적절한 메시지 변환을 보장하려면 SDV protobuf 메시지에 정의된 상응하는 필드 이름과 정확히 일치해야 합니다.
  • field_type: 필드의 SOME/IP 데이터 유형 (SomeIpType). 기본 요소, 문자열, 배열 또는 다른 중첩된 구조체일 수 있습니다.

SomeIpType 필드 유형 작성

field_type 블록은 다음 변형 중 하나를 사용하여 특정 데이터 유형을 구성합니다.

  • 기본 유형: UINT8, UINT32, INT32, FLOAT32, BOOL과 같은 값과 함께 someip_primitive을 사용합니다.
  • 문자열: someip_string을 사용하고 인코딩 (예: UTF_8, UTF_16_LE) 및 길이 정보 (fixed_length 또는 length_field_size)를 지정합니다.
  • 배열: someip_array를 사용하고 길이 정보 (fixed_length 또는 length_field_size)와 함께 array_type (다른 재귀 SomeIpType)을 정의합니다.
  • 중첩된 구조체: someip_struct를 사용하여 다른 구조체 정의를 재귀적으로 삽입합니다.

예: 구조체 유형 정의 작성

type_definition 블록 내에서 SomeIpStruct를 작성하는 방법을 보여주는 실제 예는 다음과 같습니다. 이 페이로드에는 interval이라는 8비트 부호 없는 정수와 counter라는 32비트 부호 없는 정수가 포함되어 있습니다.

type_definition {
  # No length field precedes this struct
  length_field_size: ZERO

  # First field: interval
  field {
    field_name: "interval"
    field_type {
      someip_primitive: UINT8
    }
  }

  # Second field: counter
  field {
    field_name: "counter"
    field_type {
      someip_primitive: UINT32
    }
  }
}

복합 유형 추가

구조체 내에 동적 길이 문자열 필드와 배열을 포함하려면 다음과 같은 필드를 추가합니다.

field {
  field_name: "status_message"
  field_type {
    someip_string {
      string_encoding: UTF_8
      length_field_size: FOUR
    }
  }
}
field {
  field_name: "measurements"
  field_type {
    someip_array {
      length_field_size: FOUR
      array_type { someip_primitive: FLOAT32 }
    }
  }
}