SOME/IP 유형 정의 작성

VSIDL에서 확장 가능한 서비스 지향 미들웨어 (SOME/IP) 매핑을 정의할 때 각 SOME/IP 메시지의 와이어 형식 직렬화와 페이로드 인코딩을 설명합니다. SomeIpType 및 SomeIpStruct 정의를 사용하여 AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) 및 SOME/IP 스택 페이로드 인코딩 규칙 (COVESA vsomeip 포함)과 일치하는 기본 요소, 문자열, 배열, 중첩 구조체를 모델링할 수 있습니다.

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

SomeIpStruct 메시지

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

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

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

구조체 필드 정의

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

  • field_name: 필드의 이름입니다. 메시지가 올바르게 변환되도록 하려면 SDV protobuf 메시지에 정의된 해당 필드 이름과 정확히 일치해야 합니다.
  • field_type: 필드 (SomeIpType)의 SOME/IP 데이터 유형입니다. 이는 기본, 문자열, 배열 또는 다른 중첩 구조체일 수 있습니다.

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

AUTOSAR ARXML 및 vsomeip 페이로드 인코딩 매핑

AAOS SDV를 외부 AUTOSAR 전자 제어 장치 (ECU) 또는 COVESA vsomeip와 같은 SOME/IP 스택과 통합할 때는 VSIDL type_definition이 시스템의 ARXML(SOMEIP-TRANSFORMATION-PROPS 및 SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS) 또는 vsomeip 구성에 정의된 와이어 직렬화 매개변수와 일치해야 합니다.

AUTOSAR ARXML 및 vsomeip 매개변수 VSIDL SomeIpType에 상응하는 금액 와이어 직렬화 및 페이로드 인코딩 규칙
sizeOfStructLengthField (0, 1, 2, 4바이트) SomeIpStruct.length_field_size (ZERO, ONE, TWO, FOUR) 직렬화된 구조체 페이로드 앞에 명시적 바이트 길이 접두사를 추가합니다. 길이 접두사가 없는 고정 레이아웃 구조체의 경우 ZERO로 설정됩니다.
sizeOfArrayLengthField (0, 1, 2, 4바이트) SomeIpArray.length_field_size (ZERO, ONE, TWO, FOUR) 또는 fixed_length 동적 배열에는 직렬화된 배열 요소의 바이트 길이를 나타내는 길이 필드 접두사 (ONE, TWO 또는 FOUR 바이트)가 필요합니다.
sizeOfStringLengthField 및 인코딩 (UTF-8, UTF-16LE, UTF-16BE) SomeIpString.string_encoding 및 length_field_size 또는 fixed_length 가변 길이 및 고정 길이 문자열의 AUTOSAR 문자열 직렬화 규칙 (바이트 순서 표시 및 null 종료 처리 포함)과 일치합니다.
기본 기본 유형 (uint8, uint16, uint32, float32, boolean) SomeIpPrimitive (UINT8, UINT16, UINT32, INT32, FLOAT32, BOOL) 타겟 protobuf 필드와 일치하는 네트워크 바이트 순서 (SOME/IP 사양에 따라 기본적으로 빅엔디언)로 원시 값을 인코딩합니다.