Questa pagina ti guida nella scrittura di un file di mapping SOME/IP in VSIDL. Un file di mapping SOME/IP
definisce la mappatura dei servizi SDV AAOS alle interfacce di servizio SOME/IP AUTOSAR (service_id, instance_id, eventgroup_id e method_id
definite nelle configurazioni ARXML o vsomeip del sistema), consentendo la comunicazione
bidirezionale tra le macchine virtuali SDV e le centraline elettroniche del veicolo esterne.
Il campo some_ip_mapping all'interno del messaggio VsidlEntry nel file .vsidl
contiene le informazioni di mappatura SOME/IP. Il campo some_ip_mapping ti consente di definire le mappature SOME/IP separatamente dalle definizioni dei servizi SDV.
Il SomeIp Mapping proto contiene tutte le informazioni necessarie al broker SOME/IP
per le trasformazioni tra le ECU SDV e SOME/IP. Questo proto può mappare un servizio SOME/IP nell'ecosistema SDV o le unità di servizio SDV nell'ecosistema AUTOSAR.
Concetti principali
Prima di scrivere il file di mapping, comprendi questi identificatori e concetti chiave:
Nome istanza completo SDV (FQIN): questa stringa univoca identifica le istanze del servizio SDV. È composto dal nome della VM, dal nome del pacchetto, dal nome del servizio e dal nome dell'istanza.
Tipo SDV: questo nome è un identificatore univoco per il formato dei dati del payload di un messaggio SDV e corrisponde a un messaggio proto.
SOME/IP
ServiceIdentifier(SOME/IP SID): identifica in modo univoco i servizi SOME/IP con una combinazione di ID servizio (uint16), ID istanza (uint16), versione principale (uint8) e versione secondaria (uint32).RPC SDV:metodi offerti dai servizi SDV, identificati da
method name(stringa), dalTypecontenitore e da un nomechannel.Pub/Sub SDV: argomenti pubblicati o a cui è stato eseguito l'abbonamento dai servizi SDV e identificati da un nome
TypeeTopicSOME/IP RPC: identificato da ID servizio, ID istanza e ID metodo (
uint16).Eventi SOME/IP: pubblicati dai servizi SOME/IP per Pub/Sub e identificati da ID servizio, ID istanza, ID evento (
uint16) e appartenenti a un gruppo di eventi (uint16).Broker SOME/IP:un componente di bridging in SDV che utilizza il file di mapping SOME/IP per consentire la comunicazione tra SDV e i servizi SOME/IP.
Struttura e posizione dei file
Le informazioni di mappatura SOME/IP sono incluse come campo ripetuto,
some_ip_mapping, all'interno del messaggio VsidlEntry nel file .vsidl. In questo modo, le mappature SOME/IP possono essere definite separatamente dalle definizioni del servizio SDV, consentendoti di gestire le mappature in un file dedicato.
// The root message for VSIDL files.
message VsidlEntry {
// Required. Package name for entities mentioned in the file.
string package = 1;
// List of SDV service bundles defined in the file.
repeated ServiceBundle sdv_service_bundle = 2;
// Enables custom extensions beyond the standard VSIDL model.
repeated google.xml.Any extension = 3;
// SOMEIP mapping rules.
repeated sdv.someip.v1.SomeIpMapping some_ip_mapping = 4;
// VHAL mapping rules.
repeated VhalMapping vhal_mapping = 5;
}
Crea un file di mappatura
Un file di mapping SOME/IP in genere contiene definizioni che traducono tra l'ecosistema SDV e il protocollo di rete SOME/IP. Puoi definire i mapping in due modi principali:
sdv_type_mapping: mappa un tipo di SDV (ad esempio un'interfaccia RPC o un argomento di pubblicazione) a un servizio SOME/IP.someip_service_mapping: mappa un servizio SOME/IP non elaborato (e le relative istanze, eventi o metodi) a canali RPC o argomenti Pub/Sub SDV.
Un singolo file di mapping è composto da una o più definizioni SomeIpMapping.
Mappatura del tipo di SDV
sdv_type_mapping è per i tipi di SDV esistenti che vuoi esporre alla
rete SOME/IP.
Struttura della mappatura del tipo di SDV
Devi specificare:
unit_type: il tipo di SDV da mappare (identificato dapackage_nameetype_name).someip_service_id: l'ID servizio SOME/IP a 16 bit.version_majoreversion_minor: il controllo delle versioni del servizio SOME/IP.service_oriented_mapping: definisce il comportamento di mappatura specifico (per un'interfaccia RPC o una pubblicazione).
Esempio di mappatura della pubblicazione
Se il tipo di SDV è un argomento (pubblicazione), utilizza publication_mapping. Questa mappatura
della struttura dei dati (type_definition) e dell'ID evento SOME/IP o
dell'ID gruppo di eventi, seguita dalla mappatura di argomenti SDV specifici a istanze SOME/IP.
sdv_type_mapping {
unit_type {
package_name: "com.android.sdv.samples"
type_name: "SpeedData"
}
someip_service_id: 0x1001
version_major: 1
version_minor: 0
service_oriented_mapping {
publication_mapping {
offered_topic {
simple_mapping {
group_id: 1
event_id: 0x8001
}
# type_definition defines the structural mapping to SOME/IP payloads
type_definition {
# ... (SomeIpStruct definition) ...
}
}
# Maps the SDV topic name to a specific SOME/IP instance
topic_mapping {
topic: "vehicle_speed_topic"
instance_id: 0x0001
}
}
}
}
Esempio di mappatura dell'interfaccia RPC
Se il tipo di SDV è un'interfaccia RPC, utilizza rpc_interface_mapping.
Mappa i nomi delle procedure SDV alle istanze SOME/IP method_id e collega i canali SDV alle istanze SOME/IP.
sdv_type_mapping {
unit_type {
package_name: "com.android.sdv.samples"
type_name: "DoorControl"
}
someip_service_id: 0x2001
version_major: 1
version_minor: 0
service_oriented_mapping {
rpc_interface_mapping {
offered_interface {
method {
procedure: "LockDoors"
method_id: 0x0001
# request_payload_mapping and response_payload_mapping can be defined here
}
}
rpc_channel_mapping {
channel: "front_doors"
instance_id: 0x0001
}
}
}
}
Mappatura dei servizi SOME/IP
someip_service_mapping configura la mappatura di un servizio SOME/IP specifico
(rilevato o offerto sulla rete) su argomenti e canali SDV. Consente
mappature parametrizzate complesse di eventi e RPC.
Struttura di mappatura dei servizi SOME/IP
someip_service_id,version_major,version_minor: identifica il servizio SOME/IP.(Facoltativo)
sd_behavior: definisce il comportamento di Service Discovery (EXACT_OR_ANY_MINOR_VERSIONoMINIMUM_MINOR_VERSION)instance: Parametrizza le unità di servizio e gli argomenti SDV per istanze SOME/IPinstance_idspecifiche.instance_impl: descrive l'implementazione dell'istanza, mappando eventi o metodi sulle unità di servizio parametrizzate.
Esempio di mappatura evento
Questo esempio mappa un evento SOME/IP in un argomento SDV. Utilizza instance per mappare
l'ID 1 alla stringa letterale speed_sensor_unit.
someip_service_mapping {
someip_service_id: 0x1001
version_major: 1
version_minor: 0
# Parameterize instances
instance {
instance_id: 0x0001
sdv_service_unit_parameterization {
key: 1
value: "speed_sensor_unit"
}
sdv_topic_parameterization {
key: 1
value {
topic: "speed_topic"
capacity: 10
}
}
}
# Description of all instances
instance_impl {
offered_event {
group_id: 1
event_id: 0x8001
simple_event {
sdv_unit_type {
package_name: "com.android.sdv.samples"
type_name: "SpeedData"
}
# Refers to key 1 in sdv_service_unit_parameterization. If unspecified,
# service unit name will be automatically generated by the broker
service_unit: 1
topic: 1 # Refers to key 1 in sdv_topic_parameterization
message_translation_mode: REFLECTION
type_definition {
# ... (SomeIpStruct definition) ...
}
}
}
}
}
Esempio di mappatura RPC
Questo esempio mappa un servizio RPC SOME/IP a un'interfaccia RPC SDV. Analogamente alle mappature degli eventi, il servizio utilizza l'istanza per parametrizzare il nome dell'unità di servizio.
Corrisponde al nome del canale RPC in SDV. Il blocco instance_impl definisce quindi
un'istanza di offered_interface per collegare SOME/IP method_id al
nome della procedura SDV:
someip_service_mapping {
someip_service_id: 0x2001
version_major: 1
version_minor: 0
# Parameterize instances
instance {
instance_id: 0x0001
sdv_service_unit_parameterization {
key: 1
value: "door_control_unit"
}
}
instance_impl {
offered_interface {
sdv_unit_type {
package_name: "com.android.sdv.samples"
type_name: "DoorControl"
}
# Refers to key 1 in sdv_service_unit_parameterization. This corresponds
# to the RPC channel name in SDV.
service_unit: 1
method {
procedure: "LockDoors"
method_id: 0x0001
# request_payload_mapping and response_payload_mapping can be defined here
}
}
}
}
Funzionalità avanzate
Questa sezione descrive le funzionalità avanzate supportate dal mapping SOME/IP.
Eventi per gruppi
group_event consente di dividere e mappare un singolo evento SOME/IP a più argomenti SDV contemporaneamente. Questa operazione viene eseguita specificando più voci event_part e utilizzando field_name_mapping per mappare i nomi dei campi del payload SOME/IP in entrata ai nomi dei campi del payload SDV:
offered_event {
group_id: 1
event_id: 0x8002
group_event {
type_definition {
# Definition of the complete SOME/IP payload
}
event_part {
sdv_unit_type {
package_name: "com.android.sdv.samples"
type_name: "PartAData"
}
service_unit: 1
topic: 1
field_name_mapping {
key: "someip_field_a"
value: "sdv_field_a"
}
}
event_part {
sdv_unit_type {
package_name: "com.android.sdv.samples"
type_name: "PartBData"
}
service_unit: 2
topic: 2
field_name_mapping {
key: "someip_field_b"
value: "sdv_field_b"
}
}
}
}
Mappature fire and forget
Alcuni metodi SOME/IP fire and forget (F&F) non hanno un equivalente diretto nelle interfacce RPC SDV. Vengono invece richiamati mappando un argomento SDV (pubblicazione) al metodo F&F utilizzando publication_mapping. Quando i dati vengono pubblicati nell'argomento SDV corrispondente, il broker li traduce in una chiamata al metodo SOME/IP F&F.
Per configurare questa opzione, devi impostare someip_ff_methods: true all'interno del blocco offered_topic e fornire i dettagli di routing della destinazione fire_and_forget_method all'interno di topic_mapping.
sdv_type_mapping {
unit_type {
package_name: "com.android.sdv.sample.someip"
type_name: "CounterLoad"
}
someip_service_id: 0x13
version_major: 1
version_minor: 0
service_oriented_mapping {
publication_mapping {
offered_topic {
type_definition {
# ... (SomeIpStruct definition) ...
}
someip_ff_methods: true
}
topic_mapping {
topic: "counter-load-start-counter"
instance_id: 0x1
fire_and_forget_method {
service_id: 0x3700
instance_id: 0x1000
version_major: 1
version_minor: 0
method_id: 0x1000
}
}
}
}
}