Questo documento illustra come scrivere un file di mappatura SOME/IP. Un file di mappatura SOME/IP definisce in che modo i servizi SDV vengono mappati ai servizi SOME/IP e viceversa, facilitando la comunicazione tra le ECU SDV e non SDV.
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 consente di definire le mappature SOME/IP separatamente dalle definizioni dei servizi SDV.
Il proto SomeIp Mapping contiene tutte le informazioni di cui il broker SOME/IP ha bisogno 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 mappatura, comprendi questi identificatori e concetti chiave:
Nome istanza completo (FQIN) SDV: questa stringa univoca identifica le istanze di 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 di un payload di messaggi 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 dal nome di unchannel.Pub/Sub SDV: argomenti pubblicati o a cui si sono abbonati i servizi SDV e identificati da un
Typee dal nomeTopic.RPC SOME/IP: identificati 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 mappatura SOME/IP per consentire la comunicazione tra i servizi SDV e 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 dei servizi 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 mappatura SOME/IP in genere contiene definizioni che traducono tra l'ecosistema SDV e il protocollo di rete SOME/IP. Puoi definire le mappature in due modi principali:
sdv_type_mapping: mappa un tipo 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) agli argomenti o ai canali RPC di Pub/Sub SDV.
Un singolo file di mappatura è costituito da una o più definizioni SomeIpMapping.
Mappatura dei tipi SDV
sdv_type_mapping è per i tipi SDV esistenti che vuoi esporre alla rete SOME/IP.
Struttura della mappatura dei tipi SDV
Devi specificare:
unit_type: il tipo SDV di cui viene eseguita la mappatura (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 SDV è un argomento (pubblicazione), utilizza publication_mapping. Questa mappa la struttura dei dati (type_definition) e l'ID evento o l'ID gruppo di eventi SOME/IP, seguita dalla mappatura di argomenti SDV specifici alle 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 SDV è un'interfaccia RPC, utilizza rpc_interface_mapping.
Mappa i nomi delle procedure SDV alle istanze method_id SOME/IP 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) agli argomenti e ai canali SDV. Consente mappature complesse con parametri di eventi e RPC.
Struttura della mappatura dei servizi SOME/IP
someip_service_id,version_major,version_minor: identificano il servizio SOME/IP.sd_behavior(facoltativo): definisce il comportamento di Service Discovery (EXACT_OR_ANY_MINOR_VERSIONoMINIMUM_MINOR_VERSION)instance: parametrizza le unità di servizio e gli argomenti SDV per istanzeinstance_idSOME/IP specifiche.instance_impl: descrive l'implementazione dell'istanza, mappando eventi o metodi alle unità di servizio con parametri.
Esempio di mappatura degli eventi
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 method_id SOME/IP 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 dalla mappatura 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 di tipo "fire and forget"
I metodi SOME/IP di tipo "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 F&F SOME/IP.
Per configurare questa opzione, devi impostare someip_ff_methods: true all'interno del blocco offered_topic e fornire i dettagli di routing fire_and_forget_method di destinazione 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
}
}
}
}
}