Dokumen ini memandu Anda menulis file pemetaan SOME/IP. File pemetaan SOME/IP menentukan cara layanan SDV dipetakan ke layanan SOME/IP dan sebaliknya, sehingga memfasilitasi komunikasi antara ECU SDV dan non-SDV.
Kolom some_ip_mapping dalam pesan VsidlEntry di file .vsidl
berisi informasi pemetaan SOME/IP. Kolom some_ip_mapping memungkinkan
Anda menentukan pemetaan SOME/IP secara terpisah dari definisi layanan SDV.
SomeIp Mapping Proto berisi semua informasi yang dibutuhkan broker SOME/IP
untuk transformasi antara SDV dan ECU SOME/IP. Proto ini dapat memetakan layanan SOME/IP ke ekosistem SDV atau unit layanan SDV ke ekosistem AUTOSAR.
Konsep inti
Sebelum menulis file pemetaan, pahami konsep dan ID utama berikut:
Nama Instance yang Sepenuhnya Memenuhi Syarat SDV (FQIN): String unik ini mengidentifikasi instance layanan SDV. ID ini terdiri dari nama VM, nama paket, nama layanan, dan nama instance.
Jenis SDV: Nama ini adalah ID unik untuk format data payload pesan SDV dan sesuai dengan pesan proto.
SOME/IP
ServiceIdentifier(SOME/IP SID): Mengidentifikasi layanan SOME/IP secara unik dengan kombinasi ID layanan (uint16), ID instance (uint16), versi utama (uint8), dan versi minor (uint32).RPC SDV: Metode yang ditawarkan oleh layanan SDV, yang diidentifikasi oleh
method name(string),Typeyang berisi, dan namachannel.Pub/Sub SDV: Topik yang dipublikasikan atau dilanggan oleh layanan SDV dan diidentifikasi oleh nama
TypedanTopicRPC SOME/IP: Diidentifikasi berdasarkan ID layanan, ID instance, dan ID metode (
uint16).Peristiwa SOME/IP: Dipublikasikan oleh layanan SOME/IP untuk Pub/Sub dan diidentifikasi berdasarkan ID layanan, ID instance, ID peristiwa (
uint16), dan termasuk dalam grup peristiwa (uint16).Broker SOME/IP: Komponen penghubung di SDV yang menggunakan file pemetaan SOME/IP untuk mengaktifkan komunikasi antara SDV dan layanan SOME/IP.
Struktur dan lokasi file
Informasi pemetaan SOME/IP disertakan sebagai kolom berulang,
some_ip_mapping, dalam pesan VsidlEntry di file .vsidl Anda. Hal ini memungkinkan pemetaan SOME/IP ditentukan secara terpisah dari definisi layanan SDV, sehingga Anda dapat mengelola pemetaan dalam file khusus.
// 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;
}
Membuat file pemetaan
File pemetaan SOME/IP biasanya berisi definisi yang menerjemahkan antara ekosistem SDV dan protokol jaringan SOME/IP. Anda dapat menentukan pemetaan dengan dua cara utama:
sdv_type_mapping: Memetakan jenis SDV (seperti antarmuka RPC atau topik publikasi) ke layanan SOME/IP.someip_service_mapping: Memetakan layanan SOME/IP mentah (dan instance, peristiwa, atau metodenya) ke topik Pub/Sub SDV atau saluran RPC.
Satu file pemetaan terdiri dari satu atau beberapa definisi SomeIpMapping.
Pemetaan jenis SDV
sdv_type_mapping adalah untuk jenis SDV yang ada yang ingin Anda ekspos ke jaringan SOME/IP.
Struktur pemetaan jenis SDV
Anda harus menentukan:
unit_type: Jenis SDV yang dipetakan (diidentifikasi olehpackage_namedantype_name).someip_service_id: ID layanan SOME/IP 16-bit.version_majordanversion_minor: Versi layanan SOME/IP.service_oriented_mapping: Menentukan perilaku pemetaan tertentu (baik untuk antarmuka RPC atau publikasi).
Contoh pemetaan publikasi
Jika jenis SDV Anda adalah topik (publikasi), gunakan publication_mapping. Hal ini memetakan struktur data (type_definition) dan ID Peristiwa SOME/IP atau ID EventGroup, diikuti dengan memetakan topik SDV tertentu ke instance 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
}
}
}
}
Contoh pemetaan antarmuka RPC
Jika jenis SDV Anda adalah antarmuka RPC, gunakan rpc_interface_mapping.
Petakan nama prosedur SDV ke instance method_id SOME/IP, dan tautkan saluran SDV ke instance 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
}
}
}
}
Pemetaan layanan SOME/IP
someip_service_mapping mengonfigurasi cara pemetaan layanan SOME/IP tertentu (yang ditemukan atau ditawarkan di jaringan) ke topik dan saluran SDV. Hal ini memungkinkan pemetaan berparameter kompleks dari peristiwa dan RPC.
Struktur pemetaan layanan SOME/IP
someip_service_id,version_major,version_minor: Mengidentifikasi layanan SOME/IP.sd_behavior(opsional): Menentukan perilaku penemuan layanan (EXACT_OR_ANY_MINOR_VERSIONatauMINIMUM_MINOR_VERSION)instance: Memparameterkan unit dan topik layanan SDV untuk instanceinstance_idSOME/IP tertentu.instance_impl: Mendeskripsikan penerapan instance, memetakan peristiwa atau metode ke unit layanan berparameter.
Contoh pemetaan peristiwa
Contoh ini memetakan peristiwa SOME/IP ke topik SDV. Contoh ini menggunakan instance untuk memetakan
ID 1 ke string literal 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) ...
}
}
}
}
}
Contoh pemetaan RPC
Contoh ini memetakan layanan RPC SOME/IP ke antarmuka RPC SDV. Mirip dengan
pemetaan peristiwa, layanan menggunakan instance untuk memparameterisasi nama unit layanan. Ini sesuai dengan nama channel RPC di SDV. Blok instance_impl kemudian
menentukan instance offered_interface untuk menautkan method_id SOME/IP ke
nama prosedur 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
}
}
}
}
Fitur lanjutan
Bagian ini menjelaskan fitur lanjutan yang didukung oleh pemetaan SOME/IP.
Acara kelompok
group_event memungkinkan satu peristiwa SOME/IP dibagi dan dipetakan ke beberapa topik SDV secara bersamaan. Hal ini dilakukan dengan menentukan beberapa entri event_part
dan menggunakan field_name_mapping untuk memetakan nama kolom payload SOME/IP masuk
ke nama kolom 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"
}
}
}
}
Pemetaan sekali pakai
Metode fire and forget (F&F) SOME/IP tidak memiliki padanan langsung di antarmuka SDV RPC. Sebagai gantinya, metode ini dipanggil dengan memetakan topik SDV (publikasi) ke metode F&F menggunakan publication_mapping. Saat data dipublikasikan ke topik SDV yang sesuai, broker akan menerjemahkannya ke panggilan metode F&F SOME/IP.
Untuk mengonfigurasi ini, Anda harus menyetel someip_ff_methods: true dalam blok
offered_topic, dan memberikan detail perutean fire_and_forget_method
tujuan di dalam 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
}
}
}
}
}