SOME/IP eşleme dosyası yazma

Bu belge, SOME/IP eşleme dosyası yazma konusunda size yol gösterir. Bir SOME/IP eşleme dosyası, SDV hizmetlerinin SOME/IP hizmetleriyle nasıl eşlendiğini ve bunun tersini tanımlar. Bu sayede SDV ve SDV olmayan ECU'lar arasındaki iletişim kolaylaştırılır.

.vsidl dosyanızdaki VsidlEntry mesajındaki some_ip_mapping alanı, SOME/IP eşleme bilgilerini içeriyor. some_ip_mapping alanı, SOME/IP eşlemelerini SDV hizmet tanımlarından ayrı olarak tanımlamanıza olanak tanır.

SomeIp Mapping proto, SDV ve SOME/IP ECU'lar arasındaki dönüşümler için SOME/IP aracısının ihtiyaç duyduğu tüm bilgileri içerir. Bu proto, SOME/IP hizmetini SDV ekosistemine veya SDV hizmet birimlerini AUTOSAR ekosistemine eşleyebilir.

Temel kavramlar

Eşleme dosyanızı yazmadan önce aşağıdaki temel tanımlayıcıları ve kavramları anlayın:

  • SDV Tam Nitelikli Örnek Adı (FQIN): Bu benzersiz dize, SDV hizmet örneklerini tanımlar. Sanal makine adı, paket adı, hizmet adı ve örnek adından oluşur.

  • SDV türü: Bu ad, bir SDV mesajı yükünün veri biçiminin benzersiz tanımlayıcısıdır ve bir proto mesajına karşılık gelir.

  • SOME/IP ServiceIdentifier (SOME/IP SID): Hizmet kimliği (uint16), örnek kimliği (uint16), ana sürüm (uint8) ve alt sürüm (uint32) kombinasyonuyla SOME/IP hizmetlerini benzersiz şekilde tanımlar.

  • SDV RPC: method name (string) ile tanımlanan, Type içeren ve channel adı olan SDV hizmetleri tarafından sunulan yöntemler.

  • SDV Pub/Sub: SDV hizmetleri tarafından yayınlanan veya abone olunan ve Type ile Topic adıyla tanımlanan konular

  • SOME/IP RPC: Hizmet kimliği, örnek kimliği ve yöntem kimliği ile tanımlanır (uint16).

  • SOME/IP etkinlikleri: Pub/Sub için SOME/IP hizmetleri tarafından yayınlanır ve hizmet kimliği, örnek kimliği, etkinlik kimliği (uint16) ile tanımlanır ve bir etkinlik grubuna (uint16) aittir.

  • SOME/IP aracısı: SDV ile SOME/IP hizmetleri arasında iletişimi sağlamak için SOME/IP eşleme dosyasını kullanan, SDV'deki bir köprüleme bileşeni.

Dosya yapısı ve konumu

SOME/IP eşleme bilgileri, .vsidl dosyanızdaki VsidlEntry mesajında tekrarlanan bir alan, some_ip_mapping olarak yer alır. Bu sayede, SOME/IP eşlemeleri SDV hizmeti tanımlarından ayrı olarak tanımlanabilir ve eşlemeleri özel bir dosyada yönetebilirsiniz.

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

Eşleme dosyası oluşturma

SOME/IP eşleme dosyası genellikle SDV ekosistemi ile SOME/IP ağ protokolü arasında çeviri yapan tanımlar içerir. Eşlemeleri iki temel şekilde tanımlayabilirsiniz:

  • sdv_type_mapping: Bir SDV türünü (ör. RPC arayüzü veya yayın konusu) SOME/IP hizmetiyle eşler.
  • someip_service_mapping: Ham bir SOME/IP hizmetini (ve örneklerini, etkinliklerini veya yöntemlerini) SDV Pub/Sub konularıyla ya da RPC kanallarıyla eşler.

Tek bir eşleme dosyası, bir veya daha fazla SomeIpMapping tanımından oluşur.

SDV türü eşleme

sdv_type_mapping, SOME/IP ağına sunmak istediğiniz mevcut SDV türleri içindir.

SDV türü eşleme yapısı

Şunları belirtmeniz gerekir:

  • unit_type: Eşlenen SDV türü (package_name ve type_name ile tanımlanır).
  • someip_service_id: 16 bitlik SOME/IP hizmeti kimliği.
  • version_major ve version_minor: SOME/IP hizmetinin sürümü.
  • service_oriented_mapping: Belirli eşleme davranışını (bir RPC arayüzü veya yayın için) tanımlar.

Yayın eşleme örneği

SDV türünüz konu (yayın) ise publication_mapping kullanın. Bu, verilerin yapısını (type_definition) ve SOME/IP etkinlik kimliğini veya etkinlik grubu kimliğini eşler. Ardından, belirli SDV konularını SOME/IP örnekleriyle eşler.

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

RPC arayüzü eşleme örneği

SDV türünüz bir RPC arayüzüyse rpc_interface_mapping kullanın. SDV prosedür adlarını SOME/IP method_id örnekleriyle eşleyin ve SDV kanallarını SOME/IP örneklerine bağlayın.

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 hizmet eşlemesi

someip_service_mapping, belirli bir SOME/IP hizmetinin (ağda keşfedilen veya sunulan) SDV konularına ve kanallarına nasıl eşleneceğini yapılandırır. Etkinliklerin ve RPC'lerin karmaşık parametreli eşlemelerine olanak tanır.

SOME/IP hizmet eşleme yapısı

  • someip_service_id, version_major, version_minor: SOME/IP hizmetini tanımlayın.
  • sd_behavior (isteğe bağlı): Hizmet keşfi davranışını tanımlar (EXACT_OR_ANY_MINOR_VERSION veya MINIMUM_MINOR_VERSION)

  • instance: Belirli SOME/IP instance_id örnekleri için SDV hizmet birimlerini ve konularını parametrelendirir.

  • instance_impl: Örneğin uygulanmasını, etkinliklerin veya yöntemlerin parametrelendirilmiş hizmet birimleriyle eşlenmesini açıklar.

Etkinlik eşleme örneği

Bu örnekte, bir SOME/IP etkinliği SDV konusuna eşleniyor. instance, 1 kimliğini speed_sensor_unit değişmez dizesine eşlemek için kullanılıyor.

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) ...
        }
      }
    }
  }
}

RPC eşleme örneği

Bu örnekte, bir SOME/IP RPC hizmeti bir SDV RPC arayüzüyle eşlenir. Etkinlik eşlemelerine benzer şekilde, hizmet birimi adını parametrelendirmek için örnek kullanılır. Bu, SDV'deki RPC kanal adına karşılık gelir. instance_impl bloğu daha sonra SOME/IP method_id'yi SDV prosedür adına bağlamak için offered_interface örneğini tanımlar:

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

Gelişmiş özellikler

Bu bölümde, SOME/IP eşlemesi tarafından desteklenen ileri seviye özellikler açıklanmaktadır.

Grup etkinlikleri

group_event, tek bir SOME/IP etkinliğinin bölünmesine ve aynı anda birden fazla SDV konusuna eşlenmesine olanak tanır. Bu işlem, birden fazla event_part girişi belirtilerek ve gelen SOME/IP yükü alan adlarını SDV yükü alan adlarıyla eşlemek için field_name_mapping kullanılarak yapılır:

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"
      }
    }
  }
}

Eşlemeleri oluşturup unutma

SOME/IP fire and forget (F&F) yöntemlerinin SDV RPC arayüzlerinde doğrudan bir karşılığı yoktur. Bunun yerine, bir SDV konusu (yayın) publication_mapping kullanılarak F&F yöntemiyle eşlenerek çağrılır. Veriler ilgili SDV konusunda yayınlandığında aracı, bunları SOME/IP F&F yöntemi çağrısına çevirir.

Bunu yapılandırmak için offered_topic bloğunda someip_ff_methods: true değerini ayarlamanız ve topic_mapping içinde hedef fire_and_forget_method yönlendirme ayrıntılarını sağlamanız gerekir.

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