Este documento orienta você na criação de um arquivo de mapeamento SOME/IP. Um arquivo de mapeamento SOME/IP define como os serviços SDV são mapeados para serviços SOME/IP e vice-versa, facilitando a comunicação entre ECUs SDV e não SDV.
O campo some_ip_mapping na mensagem VsidlEntry do arquivo .vsidl
contém as informações de mapeamento do SOME/IP. O campo some_ip_mapping permite
definir mapeamentos SOME/IP separadamente das definições de serviço SDV.
O SomeIp Mapping proto contém todas as informações necessárias para o broker SOME/IP
para transformações entre SDV e ECUs SOME/IP. Esse proto pode mapear um serviço SOME/IP para o ecossistema SDV ou unidades de serviço SDV para o ecossistema AUTOSAR.
Principais conceitos
Antes de escrever seu arquivo de mapeamento, entenda estes conceitos e identificadores principais:
Nome de instância totalmente qualificado (FQIN) do SDV: essa string exclusiva identifica instâncias de serviço do SDV. Ele é composto pelo nome da VM, do pacote, do serviço e da instância.
Tipo de SDV:esse nome é um identificador exclusivo do formato de dados de uma carga útil de mensagem SDV e corresponde a uma mensagem proto.
SOME/IP
ServiceIdentifier(SOME/IP SID): identifica exclusivamente serviços SOME/IP com uma combinação de ID do serviço (uint16), ID da instância (uint16), versão principal (uint8) e versão secundária (uint32).RPC do SDV:métodos oferecidos pelos serviços do SDV, identificados por
method name(string), oTypeque o contém e um nomechannel.Pub/Sub do SDV:tópicos publicados ou assinados por serviços do SDV e identificados por um nome
TypeeTopicRPC SOME/IP:identificada pelo ID do serviço, ID da instância e ID do método (
uint16).Eventos SOME/IP:publicados por serviços SOME/IP para Pub/Sub e identificados por ID de serviço, ID de instância, ID de evento (
uint16) e pertencentes a um grupo de eventos (uint16).Broker SOME/IP:um componente de ponte no SDV que consome o arquivo de mapeamento SOME/IP para ativar a comunicação entre o SDV e os serviços SOME/IP.
Estrutura e local do arquivo
As informações de mapeamento do SOME/IP são incluídas como um campo repetido, some_ip_mapping, na mensagem VsidlEntry do arquivo .vsidl. Isso permite que os mapeamentos SOME/IP sejam definidos separadamente das definições de serviço SDV, permitindo que você gerencie os mapeamentos em um arquivo dedicado.
// 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;
}
Criar um arquivo de mapeamento
Um arquivo de mapeamento SOME/IP geralmente contém definições que traduzem entre o ecossistema SDV e o protocolo de rede SOME/IP. É possível definir mapeamentos de duas maneiras principais:
sdv_type_mapping: mapeia um tipo de SDV (como uma interface RPC ou um tópico de publicação) para um serviço SOME/IP.someip_service_mapping: mapeia um serviço SOME/IP bruto (e suas instâncias, eventos ou métodos) para tópicos do Pub/Sub do SDV ou canais RPC.
Um único arquivo de mapeamento consiste em uma ou mais definições de SomeIpMapping.
Mapeamento de tipo de SDV
sdv_type_mapping é para tipos de SDV atuais que você quer expor à rede
SOME/IP.
Estrutura de mapeamento de tipo de SDV
Você precisa especificar:
unit_type: o tipo de SDV que está sendo mapeado (identificado porpackage_nameetype_name).someip_service_id: o ID do serviço SOME/IP de 16 bits.version_majoreversion_minor: o controle de versões do serviço SOME/IP.service_oriented_mapping: define o comportamento de mapeamento específico (para uma interface RPC ou uma publicação).
Exemplo de mapeamento de publicação
Se o tipo de SDV for um tópico (publicação), use publication_mapping. Isso mapeia a estrutura dos dados (type_definition) e o ID do evento SOME/IP ou o ID do EventGroup, seguido do mapeamento de tópicos específicos de SDV para instâncias 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
}
}
}
}
Exemplo de mapeamento de interface RPC
Se o tipo de SDV for uma interface RPC, use rpc_interface_mapping.
Mapeie os nomes de procedimentos do SDV para as instâncias method_id do SOME/IP e vincule os canais do SDV às instâncias do 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
}
}
}
}
Mapeamento de serviços SOME/IP
someip_service_mapping configura como um serviço SOME/IP específico (descoberto ou oferecido na rede) é mapeado em tópicos e canais do SDV. Ele permite mapeamentos parametrizados complexos de eventos e RPCs.
Estrutura de mapeamento de serviços SOME/IP
someip_service_id,version_major,version_minor: identificam o serviço SOME/IP.sd_behavior(opcional): define o comportamento de descoberta de serviços (EXACT_OR_ANY_MINOR_VERSIONouMINIMUM_MINOR_VERSION)instance: parametriza unidades de serviço e tópicos de SDV para instâncias específicas deinstance_idSOME/IP.instance_impl: descreve a implementação da instância, mapeando eventos ou métodos para as unidades de serviço parametrizadas.
Exemplo de mapeamento de eventos
Este exemplo mapeia um evento SOME/IP para um tópico SDV. Ele usa instance para mapear o ID 1 para a 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) ...
}
}
}
}
}
Exemplo de mapeamento de RPC
Este exemplo mapeia um serviço RPC SOME/IP para uma interface RPC SDV. Assim como os mapeamentos de eventos, o serviço usa a instância para parametrizar o nome da unidade de serviço. Isso corresponde ao nome do canal RPC no SDV. O bloco instance_impl define uma instância de offered_interface para vincular o method_id SOME/IP ao nome do procedimento 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
}
}
}
}
Recursos avançados
Esta seção descreve os recursos avançados compatíveis com o mapeamento SOME/IP.
Eventos em grupo
O group_event permite que um único evento SOME/IP seja dividido e mapeado para vários tópicos de SDV simultaneamente. Isso é feito especificando várias entradas event_part e usando field_name_mapping para mapear os nomes de campo de payload SOME/IP de entrada para os nomes de campo de 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"
}
}
}
}
Mapeamentos de execução e esquecimento
Alguns métodos fire and forget (F&F) do SOME/IP não têm um equivalente direto nas interfaces SDV RPC. Em vez disso, eles são invocados mapeando um tópico SDV (publicação) para o método F&F usando publication_mapping. Quando os dados são publicados no tópico SDV correspondente, o broker os traduz em uma chamada de método F&F do SOME/IP.
Para configurar isso, defina someip_ff_methods: true no bloco
offered_topic e forneça os detalhes de roteamento fire_and_forget_method
de destino dentro do 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
}
}
}
}
}