Scrivere un file di mappatura SOME/IP

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), dal Type contenitore e dal nome di un channel.

  • Pub/Sub SDV: argomenti pubblicati o a cui si sono abbonati i servizi SDV e identificati da un Type e dal nome Topic.

  • 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 da package_name e type_name).
  • someip_service_id: l'ID servizio SOME/IP a 16 bit.
  • version_major e version_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_VERSION o MINIMUM_MINOR_VERSION)

  • instance: parametrizza le unità di servizio e gli argomenti SDV per istanze instance_id SOME/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
        }
      }
    }
  }
}