تعریف نوع SOME/IP را بنویسید

هنگام تعریف نگاشت‌های میان‌افزار سرویس‌گرای مقیاس‌پذیر روی IP (SOME/IP) در VSIDL، شما ساختار بار داده SOME/IP را توصیف می‌کنید. شما این ساختار را با استفاده از پیام SomeIpType توصیف می‌کنید که به شما امکان می‌دهد مقادیر اولیه، رشته‌ها، آرایه‌ها و ساختارهای پیچیده را مدل‌سازی کنید.

این صفحه بر نحوه نوشتن تعریف نوع SomeIpStruct تمرکز دارد که در بلوک‌های type_definition برای نگاشت‌های رویداد و متد استفاده می‌شود.

پیام SomeIpStruct

یک پیام SomeIpStruct نشان دهنده یک payload ساختار یافته SOME/IP متشکل از چندین فیلد است. ساختار تعریف شده در اینجا توسط کارگزار SOME/IP برای ترجمه بین بایت‌های خام SOME/IP و فیلدهای یک پیام SDV protobuf استفاده می‌شود.

هنگام تعریف یک struct، دو ویژگی اصلی را پیکربندی می‌کنید:

  • length_field_size (اختیاری): اندازه (به بایت) فیلد طول را که قبل از ساختار در payload سریالی شده قرار می‌گیرد، مشخص می‌کند. مقادیر استفاده شده از enum LengthFieldSize شامل ZERO (بدون فیلد طول)، ONE ، TWO و FOUR است.
  • field (تکرار شده): فهرستی از فیلدهایی که ساختار را تشکیل می‌دهند.

تعریف فیلدهای ساختار

هر فیلد درون SomeIpStruct نیاز دارد به:

  • field_name : نام فیلد. این نام باید دقیقاً با نام فیلد مربوطه که در پیام SDV protobuf تعریف شده است، مطابقت داشته باشد تا ترجمه صحیح پیام تضمین شود.
  • field_type : نوع داده SOME/IP فیلد ( SomeIpType ). این می‌تواند یک نوع داده اولیه، رشته، آرایه یا یک ساختار تو در تو باشد.

نوشتن انواع فیلد 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 آورده شده است. این payload شامل یک عدد صحیح بدون علامت ۸ بیتی به نام interval و یک عدد صحیح بدون علامت ۳۲ بیتی به نام 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
    }
  }
}

اضافه کردن انواع پیچیده

برای گنجاندن یک فیلد رشته‌ای با طول پویا و یک آرایه درون ساختار، فیلدها را به این صورت اضافه کنید:

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