Scrivi una definizione di tipo SOME/IP

Quando definisci i mapping di middleware orientato ai servizi scalabile su IP (SOME/IP) in VSIDL, descrivi la struttura del payload SOME/IP. Descrivi la struttura utilizzando il messaggio SomeIpType, che ti consente di modellare primitive, stringhe, array e struct complessi.

Questa pagina si concentra su come scrivere una definizione di tipo SomeIpStruct, utilizzata nei blocchi type_definition per i mapping di eventi e metodi.

Messaggio SomeIpStruct

Un messaggio SomeIpStruct rappresenta un payload SOME/IP strutturato composto da più campi. La struttura definita qui viene utilizzata dal broker SOME/IP per tradurre tra byte SOME/IP non elaborati e i campi di un messaggio SDV protobuf.

Quando definisci una struct, configuri due proprietà principali:

  • length_field_size (facoltativo): specifica le dimensioni (in byte) del campo di lunghezza che precede la struct nel payload serializzato. I valori utilizzati dall'enum LengthFieldSize includono ZERO (nessun campo di lunghezza), ONE, TWO e FOUR.
  • field (ripetuto): un elenco di campi che compongono la struct.

Definisci i campi della struct

Ogni campo all'interno di SomeIpStruct richiede:

  • field_name: il nome del campo. Deve corrispondere esattamente al nome del campo corrispondente definito nel messaggio SDV protobuf per garantire la corretta traduzione del messaggio.
  • field_type: il tipo di dati SOME/IP del campo (SomeIpType). Può essere una primitiva, una stringa, un array o un'altra struct nidificata.

Scrivi i tipi di campo SomeIpType

Il blocco field_type configura il tipo di dati specifico utilizzando una delle seguenti varianti:

  • Tipi primitivi: utilizza someip_primitive con valori come UINT8, UINT32, INT32, FLOAT32 e BOOL.
  • Stringhe: utilizza someip_string e specifica la codifica (ad esempio, UTF_8, UTF_16_LE) e le informazioni sulla lunghezza (fixed_length o length_field_size).
  • Array: utilizza someip_array e definisci array_type (che è un altro SomeIpType ricorsivo), insieme alle informazioni sulla lunghezza (fixed_length o length_field_size).
  • Struct nidificate: utilizza someip_struct per incorporare ricorsivamente un'altra definizione di struct.

Esempio: scrivi una definizione di tipo struct

Ecco un esempio pratico di come scrivere un SomeIpStruct all'interno di un blocco type_definition. Questo payload contiene un intero senza segno a 8 bit denominato interval e un intero senza segno a 32 bit denominato 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
    }
  }
}

Aggiungi tipi complessi

Per includere un campo stringa a lunghezza dinamica e un array all'interno della struct, aggiungi campi come questo:

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