In diesem Dokument wird beschrieben, wie Sie eine SOME/IP-Zuordnungsdatei schreiben. In einer SOME/IP-Zuordnungsdatei wird definiert, wie SDV-Dienste SOME/IP-Diensten zugeordnet werden und umgekehrt. Dies erleichtert die Kommunikation zwischen SDV- und Nicht-SDV-Steuergeräten.
Das some_ip_mapping-Feld in der VsidlEntry-Nachricht in Ihrer .vsidl-Datei enthält die SOME/IP-Zuordnungsinformationen. Mit dem some_ip_mapping-Feld können Sie SOME/IP-Zuordnungen getrennt von SDV-Dienstdefinitionen definieren.
Das SomeIp Mapping-Proto enthält alle Informationen, die der SOME/IP-Broker für Transformationen zwischen SDV- und SOME/IP-Steuergeräten benötigt. Dieses Proto kann entweder einen SOME/IP-Dienst in das SDV-Ökosystem oder SDV-Dienstkomponenten in das AUTOSAR-Ökosystem einbinden.
Wichtige Konzepte
Bevor Sie Ihre Zuordnungsdatei erstellen, sollten Sie sich mit diesen wichtigen Kennungen und Konzepten vertraut machen:
Vollständig qualifizierter Instanzname (Fully Qualified Instance Name, FQIN) für SDV: Dieser eindeutige String identifiziert SDV-Dienstinstanzen. Er setzt sich aus dem VM-Namen, dem Paketnamen, dem Dienstnamen und dem Instanznamen zusammen.
SDV-Typ:Dieser Name ist eine eindeutige Kennung für das Datenformat der Nutzlast einer SDV-Nachricht und entspricht einer Proto-Nachricht.
SOME/IP
ServiceIdentifier(SOME/IP-SID): Identifiziert SOME/IP-Dienste eindeutig durch eine Kombination aus Dienst-ID (uint16), Instanz-ID (uint16), Hauptversion (uint8) und Nebenversion (uint32).SDV-RPC:Methoden, die von SDV-Diensten angeboten werden und durch
method name(String), den enthaltendenTypeund einenchannel-Namen identifiziert werden.SDV Pub/Sub:Themen, die von SDV-Diensten veröffentlicht oder abonniert werden und durch einen
Type- undTopic-Namen identifiziert werdenSOME/IP RPC:Wird durch Dienst-ID, Instanz-ID und Methoden-ID identifiziert (
uint16).SOME/IP-Ereignisse:Werden von SOME/IP-Diensten für Pub/Sub veröffentlicht und durch Dienst-ID, Instanz-ID, Ereignis-ID (
uint16) und eine Ereignisgruppe (uint16) identifiziert.SOME/IP-Broker:Eine Überbrückungskomponente in SDV, die die SOME/IP-Zuordnungsdatei verwendet, um die Kommunikation zwischen SDV und SOME/IP-Diensten zu ermöglichen.
Dateistruktur und Speicherort
Die SOME/IP-Zuordnungsinformationen sind als wiederholtes Feld some_ip_mapping in der Nachricht VsidlEntry in Ihrer Datei .vsidl enthalten. So können die SOME/IP-Zuordnungen getrennt von den SDV-Dienstdefinitionen definiert werden, sodass Sie die Zuordnungen in einer separaten Datei verwalten können.
// 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;
}
Zuordnungsdatei erstellen
Eine SOME/IP-Zuordnungsdatei enthält in der Regel Definitionen, die zwischen dem SDV-Ökosystem und dem SOME/IP-Netzwerkprotokoll übersetzen. Es gibt zwei Hauptmethoden zum Definieren von Zuordnungen:
sdv_type_mapping: Ordnet einen SDV-Typ (z. B. eine RPC-Schnittstelle oder ein Publikationsthema) einem SOME/IP-Dienst zu.someip_service_mapping: Ordnet einen SOME/IP-Rohdienst (und seine Instanzen, Ereignisse oder Methoden) SDV Pub/Sub-Themen oder RPC-Channels zu.
Eine einzelne Zuordnungsdatei besteht aus einer oder mehreren SomeIpMapping-Definitionen.
SDV-Typzuordnung
sdv_type_mapping ist für vorhandene SDV-Typen, die Sie für das SOME/IP-Netzwerk freigeben möchten.
Struktur der SDV-Typzuordnung
Sie müssen Folgendes angeben:
unit_type: Der SDV-Typ, der zugeordnet wird (identifiziert durchpackage_nameundtype_name).someip_service_id: Die 16‑Bit-SOME/IP-Dienst-ID.version_majorundversion_minor: Die Versionierung des SOME/IP-Dienstes.service_oriented_mapping: Definiert das spezifische Mapping-Verhalten (entweder für eine RPC-Schnittstelle oder eine Publikation).
Beispiel für die Publikationszuordnung
Wenn Ihr SDV-Typ ein Thema (eine Publikation) ist, verwenden Sie publication_mapping. Dadurch wird die Struktur der Daten (type_definition) und die SOME/IP-Ereignis-ID oder EventGroup-ID zugeordnet. Anschließend werden bestimmte SDV-Themen SOME/IP-Instanzen zugeordnet.
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
}
}
}
}
Beispiel für die Zuordnung von RPC-Schnittstellen
Wenn Ihr SDV-Typ eine RPC-Schnittstelle ist, verwenden Sie rpc_interface_mapping.
Ordnen Sie die SDV-Prozedurnamen den SOME/IP-method_id-Instanzen zu und verknüpfen Sie SDV-Channels mit SOME/IP-Instanzen.
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
}
}
}
}
SOME/IP-Dienstzuordnung
someip_service_mapping konfiguriert, wie ein bestimmter SOME/IP-Dienst (der im Netzwerk erkannt oder angeboten wird) SDV-Themen und ‑Channels zugeordnet wird. Sie ermöglicht komplexe parametrisierte Zuordnungen von Ereignissen und RPCs.
SOME/IP-Dienstzuordnungsstruktur
someip_service_id,version_major,version_minor: Identifizieren Sie den SOME/IP-Dienst.sd_behavior(optional): Definiert das Verhalten bei der Service Discovery (EXACT_OR_ANY_MINOR_VERSIONoderMINIMUM_MINOR_VERSION)instance: Parametrisiert SDV-Serviceeinheiten und ‑Themen für bestimmte SOME/IP-instance_id-Instanzen.instance_impl: Beschreibt die Implementierung der Instanz, wobei Ereignisse oder Methoden den parametrisierten Serviceeinheiten zugeordnet werden.
Beispiel für die Ereigniszuordnung
In diesem Beispiel wird ein SOME/IP-Ereignis einem SDV-Thema zugeordnet. Dabei wird instance verwendet, um die ID 1 dem Literalstring speed_sensor_unit zuzuordnen.
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) ...
}
}
}
}
}
Beispiel für die RPC-Zuordnung
In diesem Beispiel wird ein SOME/IP-RPC-Dienst einer SDV-RPC-Schnittstelle zugeordnet. Ähnlich wie bei Ereigniszuordnungen wird der Dienstname der Serviceeinheit mithilfe von „instance“ parametrisiert. Dies entspricht dem RPC-Channel-Namen in SDV. Der instance_impl-Block definiert dann eine Instanz von offered_interface, um die SOME/IP-method_id mit dem SDV-Prozedurnamen zu verknüpfen:
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
}
}
}
}
Erweiterte Funktionen
In diesem Abschnitt werden erweiterte Funktionen beschrieben, die von der SOME/IP-Zuordnung unterstützt werden.
Gruppenveranstaltungen
group_event ermöglicht die Aufteilung eines einzelnen SOME/IP-Ereignisses und die gleichzeitige Zuordnung zu mehreren SDV-Themen. Dazu werden mehrere event_part-Einträge angegeben und field_name_mapping verwendet, um die eingehenden SOME/IP-Nutzlast-Feldnamen den SDV-Nutzlast-Feldnamen zuzuordnen:
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"
}
}
}
}
Einmalige Zuordnungen
SOME/IP-Methoden vom Typ „Fire and Forget“ (F&F) haben keine direkte Entsprechung in SDV-RPC-Schnittstellen. Stattdessen werden sie aufgerufen, indem ein SDV-Thema (Veröffentlichung) mit publication_mapping der F&F-Methode zugeordnet wird. Wenn Daten für das entsprechende SDV-Thema veröffentlicht werden, übersetzt der Broker sie in einen SOME/IP-F&F-Methodenaufruf.
Dazu müssen Sie someip_ff_methods: true im Block offered_topic festlegen und die Routingdetails für das Ziel fire_and_forget_method in topic_mapping angeben.
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
}
}
}
}
}