इस पेज पर, VSIDL में SOME/IP मैपिंग फ़ाइल लिखने के बारे में जानकारी दी गई है. SOME/IP मैपिंग फ़ाइल से यह तय होता है कि AAOS SDV सेवाएं, AUTOSAR SOME/IP सेवा इंटरफ़ेस (service_id, instance_id, eventgroup_id, और method_id सिस्टम ARXML या vsomeip कॉन्फ़िगरेशन में तय किए गए) से कैसे मैप होती हैं. इससे SDV वर्चुअल मशीनों और बाहरी वाहन ईसीयू के बीच दोनों तरफ़ से कम्यूनिकेशन किया जा सकता है.
आपकी .vsidl फ़ाइल में मौजूद VsidlEntry मैसेज में मौजूद some_ip_mapping फ़ील्ड में, SOME/IP मैपिंग की जानकारी होती है. some_ip_mapping फ़ील्ड की मदद से, SDV सेवा की परिभाषाओं से अलग SOME/IP मैपिंग तय की जा सकती हैं.
SomeIp Mapping proto में वह सारी जानकारी होती है जो SOME/IP ब्रोकर को SDV और SOME/IP ईसीयू के बीच ट्रांसफ़ॉर्मेशन के लिए चाहिए होती है. यह प्रोटो, SDV के इकोसिस्टम में किसी SOME/IP सेवा को या SDV की सेवा इकाइयों को AUTOSAR के इकोसिस्टम में मैप कर सकता है.
सबसे ज़रूरी सिद्धांत
मैपिंग फ़ाइल लिखने से पहले, इन मुख्य आइडेंटिफ़ायर और कॉन्सेप्ट के बारे में जान लें:
SDV का पूरी तरह क्वालिफ़ाइड इंस्टेंस नेम (एफ़क्यूआईएन): यह यूनीक स्ट्रिंग, SDV सेवा के इंस्टेंस की पहचान करती है. इसमें वीएम का नाम, पैकेज का नाम, सेवा का नाम, और इंस्टेंस का नाम शामिल होता है.
SDV टाइप: यह नाम, एसडीवी मैसेज के पेलोड के डेटा फ़ॉर्मैट के लिए यूनीक आइडेंटिफ़ायर है. यह एक प्रोटो मैसेज से मेल खाता है.
SOME/IP
ServiceIdentifier(SOME/IP एसआईडी): यह SOME/IP सेवाओं की पहचान करता है. इसके लिए, यह सेवा आईडी (uint16), इंस्टेंस आईडी (uint16), मुख्य वर्शन (uint8), और माइनर वर्शन (uint32) का इस्तेमाल करता है.SDV RPC: SDV सेवाएं,
method name(string) से पहचाने गए तरीके उपलब्ध कराती हैं. इनमेंTypeऔरchannelनाम शामिल होता है.SDV Pub/Sub: SDV सेवाओं की ओर से पब्लिश किए गए या जिनकी सदस्यता ली गई है. इन्हें
TypeऔरTopicनाम से पहचाना जाता हैSOME/IP RPC: इसकी पहचान सेवा आईडी, इंस्टेंस आईडी, और तरीके के आईडी (
uint16) से होती है.SOME/IP इवेंट: इन्हें Pub/Sub के लिए SOME/IP सेवाएं पब्लिश करती हैं. इनकी पहचान सेवा आईडी, इंस्टेंस आईडी, इवेंट आईडी (
uint16) से होती है. साथ ही, ये इवेंट-ग्रुप (uint16) से जुड़े होते हैं.SOME/IP ब्रोकर: यह SDV में ब्रिजिंग कॉम्पोनेंट होता है. यह SOME/IP मैपिंग फ़ाइल का इस्तेमाल करता है, ताकि SDV और SOME/IP सेवाओं के बीच कम्यूनिकेशन चालू किया जा सके.
फ़ाइल का स्ट्रक्चर और जगह
SOME/IP मैपिंग की जानकारी को दोहराए गए फ़ील्ड के तौर पर शामिल किया जाता है. यह जानकारी, आपकी .vsidl फ़ाइल में मौजूद VsidlEntry मैसेज में some_ip_mapping के तौर पर शामिल होती है. इससे SDV सेवा की परिभाषाओं से अलग, SOME/IP मैपिंग को तय किया जा सकता है. इससे आपको मैपिंग को किसी खास फ़ाइल में मैनेज करने में मदद मिलती है.
// 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;
}
मैपिंग फ़ाइल बनाना
SOME/IP मैपिंग फ़ाइल में आम तौर पर ऐसी परिभाषाएँ होती हैं जो SDV इकोसिस्टम और SOME/IP नेटवर्क प्रोटोकॉल के बीच अनुवाद करती हैं. मैपिंग को दो मुख्य तरीकों से तय किया जा सकता है:
sdv_type_mapping: यह SDV टाइप (जैसे कि RPC इंटरफ़ेस या पब्लिकेशन विषय) को SOME/IP सेवा से मैप करता है.someip_service_mapping: यह रॉ SOME/IP सेवा (और उसके इंस्टेंस, इवेंट या तरीकों) को SDV Pub/Sub विषयों या RPC चैनलों पर मैप करता है.
एक मैपिंग फ़ाइल में एक या उससे ज़्यादा SomeIpMapping परिभाषाएं होती हैं.
SDV टाइप मैपिंग
sdv_type_mapping का इस्तेमाल, SDV के उन मौजूदा टाइप के लिए किया जाता है जिन्हें आपको SOME/IP नेटवर्क पर दिखाना है.
SDV टाइप मैपिंग स्ट्रक्चर
आपको यह जानकारी देनी होगी:
unit_type: मैप किया जा रहा एसडीवी टाइप (package_nameऔरtype_nameसे पहचाना जाता है).someip_service_id: यह 16-बिट वाला SOME/IP सेवा आईडी है.version_majorऔरversion_minor: SOME/IP सेवा का वर्शन.service_oriented_mapping: इससे मैपिंग के खास व्यवहार के बारे में पता चलता है. यह व्यवहार, आरपीसी इंटरफ़ेस या पब्लिकेशन, दोनों के लिए हो सकता है.
पब्लिकेशन मैपिंग का उदाहरण
अगर आपका एसडीवी टाइप कोई विषय (पब्लिकेशन) है, तो publication_mapping का इस्तेमाल करें. यह डेटा के स्ट्रक्चर (type_definition) और SOME/IP इवेंट आईडी या EventGroup आईडी को मैप करता है. इसके बाद, SDV के खास विषयों को 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
}
}
}
}
आरपीसी इंटरफ़ेस मैपिंग का उदाहरण
अगर आपका SDV टाइप, आरपीसी इंटरफ़ेस है, तो rpc_interface_mapping का इस्तेमाल करें.
एसडीवी प्रोसीजर के नामों को SOME/IP method_id इंस्टेंस से मैप करें. साथ ही, एसडीवी चैनलों को 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
}
}
}
}
SOME/IP सेवा की मैपिंग
someip_service_mapping कॉन्फ़िगर करता है कि नेटवर्क पर खोजी गई या ऑफ़र की गई कोई खास SOME/IP सेवा, SDV विषयों और चैनलों पर कैसे मैप होती है. इससे इवेंट और आरपीसी के पैरामीटर वाले जटिल मैपिंग की अनुमति मिलती है.
SOME/IP सेवा मैपिंग का स्ट्रक्चर
someip_service_id,version_major,version_minor: SOME/IP सेवा की पहचान करता है.sd_behavior(ज़रूरी नहीं): इससे डिवाइस और सेवाओं की अपने-आप पहचान करने के तरीके (EXACT_OR_ANY_MINOR_VERSIONयाMINIMUM_MINOR_VERSION) के बारे में पता चलता हैinstance: यह SDV सेवा इकाइयों और विषयों को पैरामीटर के तौर पर सेट करता है, ताकि उन्हें खास SOME/IPinstance_idइंस्टेंस के लिए इस्तेमाल किया जा सके.instance_impl: इससे इंस्टेंस को लागू करने, इवेंट या तरीकों को पैरामीटर वाली सेवा इकाइयों से मैप करने के बारे में पता चलता है.
इवेंट मैपिंग का उदाहरण
इस उदाहरण में, SOME/IP इवेंट को SDV विषय में मैप किया गया है. यह instance का इस्तेमाल करके, आईडी 1 को लिटरल स्ट्रिंग 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) ...
}
}
}
}
}
RPC मैपिंग का उदाहरण
इस उदाहरण में, SOME/IP आरपीसी सेवा को SDV आरपीसी इंटरफ़ेस पर मैप किया गया है. इवेंट मैपिंग की तरह ही, सेवा यूनिट के नाम को पैरामीटर के तौर पर इस्तेमाल करने के लिए, सेवा इंस्टेंस का इस्तेमाल करती है.
यह SDV में आरपीसी चैनल के नाम से मेल खाता है. इसके बाद, instance_impl ब्लॉक, offered_interface के इंस्टेंस को तय करता है, ताकि SOME/IP method_id को 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
}
}
}
}
बेहतर सुविधाएं
इस सेक्शन में, SOME/IP मैपिंग की मदद से काम करने वाली ऐडवांस सुविधाओं के बारे में बताया गया है.
ग्रुप इवेंट
group_event की मदद से, एक ही SOME/IP इवेंट को कई SDV विषयों में एक साथ बांटा और मैप किया जा सकता है. इसके लिए, कई event_part
एंट्री तय की जाती हैं. साथ ही, field_name_mapping का इस्तेमाल करके, आने वाले SOME/IP पेलोड
फ़ील्ड के नामों को 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"
}
}
}
}
फ़ायर ऐंड फ़ॉरगेट मैपिंग
SOME/IP के फ़ायर ऐंड फ़ॉरगेट (F&F) तरीकों का SDV RPC इंटरफ़ेस में कोई सीधा विकल्प नहीं है. इसके बजाय, SDV विषय (पब्लिकेशन) को publication_mapping का इस्तेमाल करके, F&F तरीके से मैप करके इन्हें चालू किया जाता है. जब डेटा को SDV के संबंधित विषय पर पब्लिश किया जाता है, तो ब्रोकर उसे SOME/IP F&F मेथड कॉल में बदल देता है.
इसे कॉन्फ़िगर करने के लिए, आपको offered_topic ब्लॉक में someip_ff_methods: true सेट करना होगा. साथ ही, अपने topic_mapping में डेस्टिनेशन fire_and_forget_method की राउटिंग की जानकारी देनी होगी.
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
}
}
}
}
}