Tworzenie pliku mapowania SOME/IP

W tym dokumencie znajdziesz instrukcje tworzenia pliku mapowania SOME/IP. Plik mapowania SOME/IP określa, jak usługi SDV są mapowane na usługi SOME/IP i odwrotnie, co ułatwia komunikację między ECU SDV i ECU innymi niż SDV.

some_ip_mapping PoleVsidlEntry wiadomości w .vsidlpliku zawiera informacje o mapowaniu SOME/IP. Pole some_ip_mapping umożliwia definiowanie mapowań SOME/IP oddzielnie od definicji usług SDV.

SomeIp Mapping Protokół zawiera wszystkie informacje, których broker SOME/IP potrzebuje do przekształcania danych między SDV a ECU SOME/IP. Ten protokół może mapować usługę SOME/IP na ekosystem SDV lub jednostki usługi SDV na ekosystem AUTOSAR.

Podstawowe pojęcia

Zanim napiszesz plik mapowania, zapoznaj się z tymi kluczowymi identyfikatorami i pojęciami:

  • W pełni kwalifikowana nazwa instancji SDV (FQIN): ten unikalny ciąg znaków identyfikuje instancje usługi SDV. Składa się z nazwy maszyny wirtualnej, nazwy pakietu, nazwy usługi i nazwy instancji.

  • Typ SDV: ta nazwa jest unikalnym identyfikatorem formatu danych ładunku wiadomości SDV i odpowiada wiadomości proto.

  • SOME/IPServiceIdentifier (SOME/IP SID): unikalnie identyfikuje usługi SOME/IP za pomocą kombinacji identyfikatora usługi (uint16), identyfikatora instancji (uint16), wersji głównej (uint8) i wersji podrzędnej (uint32).

  • SDV RPC: metody oferowane przez usługi SDV, identyfikowane przez method name (ciąg znaków), zawierający Type i nazwę channel.

  • SDV Pub/Sub: tematy publikowane lub subskrybowane przez usługi SDV i identyfikowane przez nazwę TypeTopic.

  • SOME/IP RPC: identyfikowane przez identyfikator usługi, identyfikator instancji i identyfikator metody (uint16).

  • Zdarzenia SOME/IP: publikowane przez usługi SOME/IP na potrzeby Pub/Sub i identyfikowane za pomocą identyfikatora usługi, identyfikatora instancji, identyfikatora zdarzenia (uint16) oraz należące do grupy zdarzeń (uint16).

  • Broker SOME/IP: komponent pomostowy w SDV, który wykorzystuje plik mapowania SOME/IP, aby umożliwić komunikację między SDV a usługami SOME/IP.

Struktura i lokalizacja pliku

Informacje o mapowaniu SOME/IP są zawarte jako pole powtarzane,some_ip_mapping, w ramach wiadomości VsidlEntry w pliku .vsidl. Dzięki temu mapowania SOME/IP mogą być definiowane oddzielnie od definicji usługi SDV, co umożliwia zarządzanie mapowaniami w osobnym pliku.

// 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;
}

Tworzenie pliku mapowania

Plik mapowania SOME/IP zwykle zawiera definicje, które tłumaczą informacje między ekosystemem SDV a protokołem sieciowym SOME/IP. Mapowania możesz zdefiniować na 2 główne sposoby:

  • sdv_type_mapping: mapuje typ SDV (np. interfejs RPC lub temat publikacji) na usługę SOME/IP.
  • someip_service_mapping: mapuje surową usługę SOME/IP (i jej instancje, zdarzenia lub metody) na tematy SDV Pub/Sub lub kanały RPC.

Pojedynczy plik mapowania zawiera co najmniej 1 definicję SomeIpMapping.

Mapowanie typu SDV

sdv_type_mapping – w przypadku istniejących typów SDV, które chcesz udostępnić w sieci SOME/IP.

Struktura mapowania typu SDV

Musisz podać:

  • unit_type: typ SDV, który jest mapowany (identyfikowany przez package_nametype_name).
  • someip_service_id: 16-bitowy identyfikator usługi SOME/IP.
  • version_majorversion_minor: wersja usługi SOME/IP.
  • service_oriented_mapping: określa konkretne działanie mapowania (w przypadku interfejsu RPC lub publikacji).

Przykład mapowania publikacji

Jeśli typem SDV jest temat (publikacja), użyj znaku publication_mapping. Mapuje to strukturę danych (type_definition) oraz identyfikator zdarzenia SOME/IP lub identyfikator grupy zdarzeń, a następnie mapuje konkretne tematy SDV na instancje 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
      }
    }
  }
}

Przykład mapowania interfejsu RPC

Jeśli typem SDV jest interfejs RPC, użyj znaku rpc_interface_mapping. Zmapuj nazwy procedur SDV na instancje SOME/IP method_id i połącz kanały SDV z instancjami 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
      }
    }
  }
}

Mapowanie usług SOME/IP

someip_service_mapping konfiguruje sposób, w jaki konkretna usługa SOME/IP (wykryta lub oferowana w sieci) jest mapowana na tematy i kanały SDV. Umożliwia złożone mapowania sparametryzowane zdarzeń i wywołań RPC.

Struktura mapowania usług SOME/IP

  • someip_service_id, version_major, version_minor: identyfikuje usługę SOME/IP.
  • sd_behavior (opcjonalny): określa zachowanie wykrywania usług (EXACT_OR_ANY_MINOR_VERSION lub MINIMUM_MINOR_VERSION).

  • instance: parametryzuje jednostki usług SDV i tematy dla konkretnych instancji SOME/IP instance_id.

  • instance_impl: opisuje wdrożenie instancji, mapowanie zdarzeń lub metod na sparametryzowane jednostki usługi.

Przykład mapowania zdarzeń

W tym przykładzie zdarzenie SOME/IP jest mapowane na temat SDV. Używa instance do zmapowania identyfikatora 1 na ciąg dosłowny 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) ...
        }
      }
    }
  }
}

Przykład mapowania RPC

Ten przykład mapuje usługę RPC SOME/IP na interfejs RPC SDV. Podobnie jak w przypadku mapowań zdarzeń usługa używa instancji do parametryzowania nazwy jednostki usługi. Odpowiada to nazwie kanału RPC w SDV. Blok instance_impl definiuje następnie instancję offered_interface, aby połączyć SOME/IP method_id z nazwą procedury 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
      }
    }
  }
}

Funkcje zaawansowane

W tej sekcji opisujemy funkcje zaawansowane obsługiwane przez mapowanie SOME/IP.

Imprezy grupowe

group_event umożliwia podzielenie pojedynczego zdarzenia SOME/IP i zmapowanie go jednocześnie na wiele tematów SDV. Odbywa się to przez określenie wielu wpisów event_part i użycie field_name_mapping do zmapowania nazw pól przychodzącego ładunku SOME/IP na nazwy pól ładunku 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"
      }
    }
  }
}

Mapowania typu „ustaw i zapomnij”

Metody SOME/IP typu „wyślij i zapomnij” (F&F) nie mają bezpośredniego odpowiednika w interfejsach SDV RPC. Zamiast tego są wywoływane przez mapowanie tematu SDV (publikacji) na metodę F&F za pomocą publication_mapping. Gdy dane są publikowane w odpowiednim temacie SDV, broker tłumaczy je na wywołanie metody SOME/IP F&F.

Aby to skonfigurować, musisz ustawić someip_ff_methods: true w bloku offered_topic i podać szczegóły routingu docelowego fire_and_forget_method w 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
        }
      }
    }
  }
}