Scrivi una definizione di tipo SOME/IP

Quando definisci i mapping di middleware scalabile orientato ai servizi su IP (SOME/IP) in VSIDL, descrivi la serializzazione del formato di trasmissione e la codifica del payload di ogni messaggio SOME/IP. Utilizzando le definizioni SomeIpType e SomeIpStruct, puoi modellare primitive, stringhe, array e struct nidificati che corrispondono alle regole di codifica del payload dello stack AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) e SOME/IP (incluso COVESA vsomeip).

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

SomeIpStruct message

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 i byte SOME/IP non elaborati e i campi di un messaggio protobuf SDV.

Quando definisci una struttura, configuri due proprietà principali:

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

Definisci i campi 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 protobuf SDV 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 struttura 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 le informazioni su codifica (ad esempio, UTF_8 o UTF_16_LE) e 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 nidificati:utilizza someip_struct per incorporare un'altra definizione di struct in modo ricorsivo.

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 numero intero senza segno a 8 bit denominato interval e un numero 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
    }
  }
}

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

Mappa la codifica del payload AUTOSAR ARXML e vsomeip

Quando integri AAOS SDV con unità di controllo elettronico (ECU) AUTOSAR esterne o stack SOME/IP come COVESA vsomeip, assicurati che il tuo VSIDL type_definition corrisponda ai parametri di serializzazione dei cavi definiti in ARXML (SOMEIP-TRANSFORMATION-PROPS e SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS) o nella configurazione vsomeip del sistema:

AUTOSAR ARXML e parametro vsomeip Equivalente di VSIDL SomeIpType Regola di serializzazione e codifica del payload
sizeOfStructLengthField (0, 1, 2, 4 byte) SomeIpStruct.length_field_size (ZERO, ONE, TWO, FOUR) Antepone un prefisso di lunghezza in byte esplicito prima del payload della struct serializzata. Imposta questo valore su ZERO per le struct a layout fisso senza un prefisso di lunghezza.
sizeOfArrayLengthField (0, 1, 2, 4 byte) SomeIpArray.length_field_size (ZERO, ONE, TWO, FOUR) o fixed_length Gli array dinamici richiedono un prefisso del campo lunghezza (ONE, TWO o FOUR byte) che indica la lunghezza in byte degli elementi dell'array serializzato.
sizeOfStringLengthField e codifica (UTF-8, UTF-16LE, UTF-16BE) SomeIpString.string_encoding e length_field_size o fixed_length Corrisponde alle regole di serializzazione delle stringhe AUTOSAR (inclusa la gestione del marcatore dell'ordine dei byte e della terminazione null) per le stringhe a lunghezza variabile e fissa.
Tipi di base primitivi (uint8, uint16, uint32, float32, boolean) SomeIpPrimitive (UINT8, UINT16, UINT32, INT32, FLOAT32, BOOL) Codifica i valori primitivi in ordine di byte di rete (big-endian per impostazione predefinita in base alla specifica SOME/IP) corrispondenti al campo protobuf di destinazione.