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 사양에 따라 기본적으로 빅엔디언)로 원시 값을 인코딩합니다. |