SOME/IP-Zuordnungsdatei schreiben

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 enthaltenden Type und einen channel-Namen identifiziert werden.

  • SDV Pub/Sub:Themen, die von SDV-Diensten veröffentlicht oder abonniert werden und durch einen Type- und Topic-Namen identifiziert werden

  • SOME/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 durch package_name und type_name).
  • someip_service_id: Die 16‑Bit-SOME/IP-Dienst-ID.
  • version_major und version_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_VERSION oder MINIMUM_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
        }
      }
    }
  }
}