Ce document vous explique comment écrire un fichier de mappage SOME/IP. Un fichier de mappage SOME/IP définit comment les services SDV sont mappés aux services SOME/IP et inversement, ce qui facilite la communication entre les ECU SDV et non SDV.
Le champ some_ip_mapping du message VsidlEntry de votre fichier .vsidl contient les informations de mappage SOME/IP. Le champ some_ip_mapping vous permet de définir des mappages SOME/IP séparément des définitions de service SDV.
Le proto SomeIp Mapping contient toutes les informations dont le broker SOME/IP a besoin pour les transformations entre les ECU SDV et SOME/IP. Ce proto peut mapper un service SOME/IP dans l'écosystème SDV ou des unités de service SDV dans l'écosystème AUTOSAR.
Concepts fondamentaux
Avant d'écrire votre fichier de mappage, comprenez ces identifiants et concepts clés :
Nom d'instance complet SDV (FQIN) : cette chaîne unique identifie les instances de service SDV. Elle est composée du nom de la VM, du nom du package, du nom du service et du nom de l'instance.
Type SDV : ce nom est un identifiant unique pour le format de données d'une charge utile de message SDV et correspond à un message proto.
SOME/IP
ServiceIdentifier(SOME/IP SID) : identifie de manière unique les services SOME/IP avec une combinaison d'ID de service (uint16), d'ID d'instance (uint16), de version principale (uint8) et de version mineure (uint32).RPC SDV : méthodes proposées par les services SDV, identifiées par un
method name(chaîne), leTypecontenant et un nom dechannel.Pub/Sub SDV : sujets publiés ou auxquels les services SDV sont abonnés, identifiés par un nom
TypeetTopic.RPC SOME/IP : identifié par l'ID de service, l'ID d'instance et l'ID de méthode (
uint16).Événements SOME/IP : publiés par les services SOME/IP pour Pub/Sub et identifiés par l'ID de service, l'ID d'instance, l'ID d'événement (
uint16) et appartenant à un groupe d'événements (uint16).Broker SOME/IP : composant de pontage dans SDV qui consomme le fichier de mappage SOME/IP pour permettre la communication entre les services SDV et SOME/IP.
Structure et emplacement des fichiers
Les informations de mappage SOME/IP sont incluses en tant que champ répété, some_ip_mapping, dans le message VsidlEntry de votre fichier .vsidl. Cela permet de définir les mappages SOME/IP séparément des définitions de service SDV, ce qui vous permet de gérer les mappages dans un fichier dédié.
// 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;
}
Créer un fichier de mappage
Un fichier de mappage SOME/IP contient généralement des définitions qui traduisent entre l'écosystème SDV et le protocole réseau SOME/IP. Vous pouvez définir des mappages de deux manières principales :
sdv_type_mapping: mappe un type SDV (tel qu'une interface RPC ou un sujet de publication) à un service SOME/IP.someip_service_mapping: mappe un service SOME/IP brut (et ses instances, événements ou méthodes) à des sujets Pub/Sub SDV ou à des canaux RPC.
Un seul fichier de mappage se compose d'une ou de plusieurs définitions SomeIpMapping.
Mappage de type SDV
sdv_type_mapping concerne les types SDV existants que vous souhaitez exposer au réseau SOME/IP.
Structure du mappage de type SDV
Vous devez préciser :
unit_type: type SDV mappé (identifié parpackage_nameettype_name).someip_service_id: ID de service SOME/IP de 16 bits.version_majoretversion_minor: version du service SOME/IP.service_oriented_mapping: définit le comportement de mappage spécifique (pour une interface RPC ou une publication).
Exemple de mappage de publication
Si votre type SDV est un sujet (publication), utilisez publication_mapping. Cela mappe la structure des données (type_definition) et l'ID d'événement ou l'ID de groupe d'événements SOME/IP, puis mappe des sujets SDV spécifiques à des instances 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
}
}
}
}
Exemple de mappage d'interface RPC
Si votre type SDV est une interface RPC, utilisez rpc_interface_mapping.
Mappez les noms de procédure SDV aux instances method_id SOME/IP et associez les canaux SDV aux instances 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
}
}
}
}
Mappage de service SOME/IP
someip_service_mapping configure la manière dont un service SOME/IP spécifique (découvert ou proposé sur le réseau) est mappé sur des sujets et des canaux SDV. Il permet des mappages paramétrés complexes d'événements et de RPC.
Structure du mappage de service SOME/IP
someip_service_id,version_major,version_minor: identifient le service SOME/IP.sd_behavior(facultatif) : définit le comportement de découverte de service (EXACT_OR_ANY_MINOR_VERSIONouMINIMUM_MINOR_VERSION).instance: paramètre les unités de service et les sujets SDV pour des instancesinstance_idSOME/IP spécifiques.instance_impl: décrit l'implémentation de l'instance, en mappant des événements ou des méthodes aux unités de service paramétrées.
Exemple de mappage d'événements
Cet exemple mappe un événement SOME/IP dans un sujet SDV. Il utilise instance pour mapper l'ID 1 à la chaîne littérale 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) ...
}
}
}
}
}
Exemple de mappage RPC
Cet exemple mappe un service RPC SOME/IP à une interface RPC SDV. Comme pour les mappages d'événements, le service utilise une instance pour paramétrer le nom de l'unité de service. Cela correspond au nom du canal RPC dans SDV. Le bloc instance_impl définit ensuite une instance de offered_interface pour associer le method_id SOME/IP au nom de la procédure 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
}
}
}
}
Fonctionnalités avancées
Cette section décrit les fonctionnalités avancées compatibles avec le mappage SOME/IP.
Événements de groupes
group_event permet de diviser un seul événement SOME/IP et de le mapper simultanément à plusieurs sujets SDV. Pour ce faire, spécifiez plusieurs entrées event_part et utilisez field_name_mapping pour mapper les noms de champs de charge utile SOME/IP entrants aux noms de champs de charge utile 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"
}
}
}
}
Mappages de type "fire and forget"
Les méthodes SOME/IP de type "fire and forget" (F&F) n'ont pas d'équivalent direct dans les interfaces RPC SDV. Elles sont plutôt appelées en mappant un sujet SDV (publication) à la méthode F&F à l'aide de publication_mapping. Lorsque des données sont publiées dans le sujet SDV correspondant, le broker les traduit en appel de méthode F&F SOME/IP.
Pour configurer cela, vous devez définir someip_ff_methods: true dans le bloc offered_topic et fournir les détails de routage fire_and_forget_method de destination dans votre 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
}
}
}
}
}