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'enumLengthFieldSizeincludonoZERO(nessun campo di lunghezza),ONE,TWOeFOUR.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_primitivecon valori comeUINT8,UINT32,INT32,FLOAT32eBOOL. - Stringhe: utilizza
someip_stringe specifica la codifica (ad esempio,UTF_8,UTF_16_LE) e le informazioni sulla lunghezza (fixed_lengtholength_field_size). - Array: utilizza
someip_arraye definisciarray_type(che è un altroSomeIpTypericorsivo), insieme alle informazioni sulla lunghezza (fixed_lengtholength_field_size). - Struct nidificate: utilizza
someip_structper 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 }
}
}
}