VSIDL'de IP üzerinden ölçeklenebilir hizmet odaklı ara yazılım (SOME/IP) eşlemelerini tanımlarken SOME/IP yükünün yapısını açıklarsınız. Yapıyı, SomeIpType mesajını kullanarak tanımlarsınız. Bu mesaj, temel öğeleri, dizeleri, dizileri ve karmaşık yapıları modellemenize olanak tanır.
Bu sayfada, etkinlik ve yöntem eşlemeleri için type_definition bloklarında kullanılan SomeIpStruct türü tanımının nasıl yazılacağı açıklanmaktadır.
SomeIpStruct mesajı
SomeIpStruct mesajı, birden fazla alandan oluşan yapılandırılmış bir SOME/IP yükünü temsil eder. Burada tanımlanan yapı, SOME/IP aracısı tarafından ham SOME/IP baytları ile SDV protobuf mesajının alanları arasında çeviri yapmak için kullanılır.
Bir yapı tanımlarken iki ana özelliği yapılandırırsınız:
length_field_size(isteğe bağlı): Serileştirilmiş yükte yapıdan önce gelen uzunluk alanının boyutunu (bayt cinsinden) belirtir.LengthFieldSizeenum'undan kullanılan değerler arasındaZERO(uzunluk alanı yok),ONE,TWOveFOURbulunur.field(yinelenen): Yapıyı oluşturan alanların listesi.
Yapı alanlarını tanımlama
SomeIpStruct içindeki her alan için şunlar gerekir:
field_name: Alanın adı. Bu, uygun ileti çevirisi için SDV protobuf iletisinde tanımlanan ilgili alan adıyla tam olarak eşleşmelidir.field_type: Alanın SOME/IP veri türü (SomeIpType). Bu, ilkel, dize, dizi veya başka bir iç içe yerleştirilmiş yapı olabilir.
SomeIpType alan türlerini yazma
field_type bloğu, aşağıdaki varyantlardan birini kullanarak belirli veri türünü yapılandırır:
- Temel türler:
UINT8,UINT32,INT32,FLOAT32veBOOLgibi değerlerlesomeip_primitivekullanın. - Dizeler:
someip_stringkullanın ve kodlama (ör.UTF_8,UTF_16_LE) ile uzunluk bilgilerini (fixed_lengthveyalength_field_size) belirtin. - Diziler:
someip_arraykullanın ve uzunluk bilgileriyle (fixed_lengthveyalength_field_size) birliktearray_type'ü (başka bir yinelemeliSomeIpType) tanımlayın. - İç içe yerleştirilmiş yapılar: Başka bir yapı tanımını yinelemeli olarak yerleştirmek için
someip_structkullanın.
Örnek: Yapı türü tanımı yazma
type_definition bloğunun içine SomeIpStruct yazmaya dair pratik bir örneği aşağıda bulabilirsiniz. Bu yükte interval adlı 8 bitlik işaretsiz bir tamsayı ve counter adlı 32 bitlik işaretsiz bir tamsayı bulunur:
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
}
}
}
Karmaşık türler ekleme
Yapı içinde dinamik uzunluklu bir dize alanı ve bir dizi eklemek için alanları şu şekilde ekleyin:
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 }
}
}
}