เมื่อกำหนดการแมปมิดเดิลแวร์ที่มุ่งเน้นบริการที่ปรับขนาดได้ผ่าน IP (SOME/IP) ใน
VSIDL คุณจะอธิบายโครงสร้างของเพย์โหลด SOME/IP คุณอธิบายโครงสร้างโดยใช้ SomeIpType message ซึ่งช่วยให้คุณสร้างโมเดลของ Primitive, สตริง, อาร์เรย์ และโครงสร้างที่ซับซ้อนได้
หน้านี้มุ่งเน้นที่วิธีเขียนคำจำกัดความประเภท SomeIpStruct ซึ่งใช้ในบล็อก type_definition สำหรับการแมปเหตุการณ์และวิธีการ
ข้อความ SomeIpStruct
SomeIpStructข้อความแสดงถึงเพย์โหลด SOME/IP ที่มีโครงสร้างซึ่งประกอบด้วย
หลายฟิลด์ โครงสร้างที่กำหนดไว้ที่นี่จะใช้โดยโบรกเกอร์ SOME/IP เพื่อ
แปลระหว่างไบต์ SOME/IP ดิบกับฟิลด์ของข้อความ SDV protobuf
เมื่อกำหนดโครงสร้าง คุณจะกำหนดค่าพร็อพเพอร์ตี้หลัก 2 รายการ ได้แก่
length_field_size(ไม่บังคับ): ระบุขนาด (เป็นไบต์) ของ ฟิลด์ความยาวที่อยู่ก่อนโครงสร้างในเพย์โหลดที่แปลงเป็นรูปแบบข้อมูล ค่าที่ใช้จาก EnumLengthFieldSizeได้แก่ZERO(ไม่มีฟิลด์ความยาว),ONE,TWOและFOURfield(ซ้ำ): รายการฟิลด์ที่ประกอบกันเป็นโครงสร้าง
กำหนดฟิลด์ของโครงสร้าง
แต่ละฟิลด์ภายใน SomeIpStruct ต้องมีข้อมูลต่อไปนี้
field_name: ชื่อฟิลด์ ต้องตรงกันทุกประการกับ ชื่อฟิลด์ที่เกี่ยวข้องซึ่งกำหนดไว้ในข้อความ SDV protobuf เพื่อให้มั่นใจว่าข้อความจะได้รับการแปลอย่างถูกต้องfield_type: ประเภทข้อมูล SOME/IP ของฟิลด์ (SomeIpType) ซึ่งอาจเป็น Primitive, สตริง, อาร์เรย์ หรือโครงสร้างที่ซ้อนกันอีก
เขียนประเภทฟิลด์ SomeIpType
บล็อก field_type จะกำหนดค่าประเภทข้อมูลที่เฉพาะเจาะจงโดยใช้ตัวแปรใดตัวแปรหนึ่งต่อไปนี้
- ประเภทดั้งเดิม: ใช้
someip_primitiveกับค่าต่างๆ เช่นUINT8,UINT32,INT32,FLOAT32และBOOL - สตริง: ใช้
someip_stringและระบุการเข้ารหัส (เช่นUTF_8,UTF_16_LE) และข้อมูลความยาว (fixed_lengthหรือlength_field_size) - อาร์เรย์: ใช้
someip_arrayและกำหนดarray_type(ซึ่งเป็นSomeIpTypeแบบเรียกซ้ำอีกรายการ) พร้อมกับข้อมูลความยาว (fixed_lengthหรือlength_field_size) - โครงสร้างที่ซ้อนกัน: ใช้
someip_structเพื่อฝังคำจำกัดความของโครงสร้างอื่นแบบเรียกซ้ำ
ตัวอย่าง: เขียนคำจำกัดความประเภทโครงสร้าง
ต่อไปนี้เป็นตัวอย่างการเขียน SomeIpStruct ภายในบล็อก type_definition เพย์โหลดนี้มีจำนวนเต็มแบบ 8 บิตที่ไม่ใช่ค่าลบชื่อ
interval และจำนวนเต็มแบบ 32 บิตที่ไม่ใช่ค่าลบชื่อ counter ดังนี้
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
}
}
}
เพิ่มประเภทที่ซับซ้อน
หากต้องการรวมฟิลด์สตริงแบบความยาวแบบไดนามิกและอาร์เรย์ภายใน struct ให้เพิ่มฟิลด์ดังนี้
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 }
}
}
}