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,Typeiçeren vechanneladı olan SDV hizmetleri tarafından sunulan yöntemler.SDV Pub/Sub: SDV hizmetleri tarafından yayınlanan veya abone olunan ve
TypeileTopicadıyla tanımlanan konularSOME/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_namevetype_nameile tanımlanır).someip_service_id: 16 bitlik SOME/IP hizmeti kimliği.version_majorveversion_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_VERSIONveyaMINIMUM_MINOR_VERSION)instance: Belirli SOME/IPinstance_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
}
}
}
}
}