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 Pole w VsidlEntry 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/IP
ServiceIdentifier(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ącyTypei nazwęchannel.SDV Pub/Sub: tematy publikowane lub subskrybowane przez usługi SDV i identyfikowane przez nazwę
TypeiTopic.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 przezpackage_nameitype_name).someip_service_id: 16-bitowy identyfikator usługi SOME/IP.version_majoriversion_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_VERSIONlubMINIMUM_MINOR_VERSION).instance: parametryzuje jednostki usług SDV i tematy dla konkretnych instancji SOME/IPinstance_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
}
}
}
}
}