Viết tệp ánh xạ SOME/IP

Trang này hướng dẫn bạn cách viết tệp ánh xạ SOME/IP trong VSIDL. Tệp ánh xạ SOME/IP xác định cách các dịch vụ SDV của AAOS ánh xạ đến các giao diện dịch vụ SOME/IP của AUTOSAR (service_id, instance_id, eventgroup_idmethod_id được xác định trong cấu hình ARXML hoặc vsomeip của hệ thống), cho phép giao tiếp hai chiều giữa các máy ảo SDV và ECU bên ngoài của xe.

Trường some_ip_mapping trong thông báo VsidlEntry trong tệp .vsidl chứa thông tin liên kết SOME/IP. Trường some_ip_mapping cho phép bạn xác định các mối liên kết SOME/IP riêng biệt với các định nghĩa dịch vụ SDV.

SomeIp Mapping proto chứa tất cả thông tin mà trình môi giới SOME/IP cần để chuyển đổi giữa SDV và ECU SOME/IP. Proto này có thể liên kết một dịch vụ SOME/IP vào hệ sinh thái SDV hoặc các đơn vị dịch vụ SDV vào hệ sinh thái AUTOSAR.

Các khái niệm chính

Trước khi viết tệp ánh xạ, hãy tìm hiểu những giá trị nhận dạng và khái niệm chính sau:

  • Tên phiên bản đủ điều kiện (FQIN) SDV: Chuỗi duy nhất này xác định các phiên bản dịch vụ SDV. Nó bao gồm tên VM, tên gói, tên dịch vụ và tên phiên bản.

  • Loại SDV: Tên này là giá trị nhận dạng riêng biệt cho định dạng dữ liệu của tải trọng thông báo SDV và tương ứng với một thông báo proto.

  • SOME/IP ServiceIdentifier (SOME/IP SID): Xác định duy nhất các dịch vụ SOME/IP bằng cách kết hợp mã dịch vụ (uint16), mã phiên bản (uint16), phiên bản lớn (uint8) và phiên bản nhỏ (uint32).

  • SDV RPC: Các phương thức do dịch vụ SDV cung cấp, được xác định bằng method name (chuỗi), Type chứa và tên channel.

  • SDV Pub/Sub: Các chủ đề được xuất bản hoặc đăng ký bởi các dịch vụ SDV và được xác định bằng tên TypeTopic

  • SOME/IP RPC: Được xác định bằng mã dịch vụ, mã phiên bản và mã phương thức (uint16).

  • Sự kiện SOME/IP: Được các dịch vụ SOME/IP xuất bản cho Pub/Sub và được xác định bằng mã dịch vụ, mã phiên bản, mã sự kiện (uint16) và thuộc một nhóm sự kiện (uint16).

  • Broker SOME/IP: Một thành phần cầu nối trong SDV sử dụng tệp ánh xạ SOME/IP để cho phép giao tiếp giữa SDV và các dịch vụ SOME/IP.

Cấu trúc và vị trí tệp

Thông tin liên kết SOME/IP được đưa vào dưới dạng một trường lặp lại, some_ip_mapping, trong thông báo VsidlEntry trong tệp .vsidl. Điều này cho phép bạn xác định các mối liên kết SOME/IP riêng biệt với các định nghĩa về dịch vụ SDV, nhờ đó, bạn có thể quản lý các mối liên kết trong một tệp chuyên dụng.

// 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;
}

Tạo tệp ánh xạ

Tệp liên kết SOME/IP thường chứa các định nghĩa chuyển đổi giữa hệ sinh thái SDV và giao thức mạng SOME/IP. Bạn có thể xác định các mối liên kết theo 2 cách chính:

  • sdv_type_mapping: Ánh xạ một loại SDV (chẳng hạn như giao diện RPC hoặc chủ đề xuất bản) với một dịch vụ SOME/IP.
  • someip_service_mapping: Liên kết một dịch vụ SOME/IP thô (và các phiên bản, sự kiện hoặc phương thức của dịch vụ đó) với các chủ đề Pub/Sub SDV hoặc các kênh RPC.

Một tệp ánh xạ duy nhất bao gồm một hoặc nhiều định nghĩa SomeIpMapping.

Ánh xạ loại SDV

sdv_type_mapping là dành cho các loại SDV hiện có mà bạn muốn hiển thị cho mạng SOME/IP.

Cấu trúc ánh xạ loại SDV

Bạn cần chỉ định:

  • unit_type: Loại SDV đang được ánh xạ (được xác định bằng package_nametype_name).
  • someip_service_id: Mã dịch vụ SOME/IP 16 bit.
  • version_majorversion_minor: Phiên bản của dịch vụ SOME/IP.
  • service_oriented_mapping: Xác định hành vi ánh xạ cụ thể (cho giao diện RPC hoặc một ấn phẩm).

Ví dụ về mối liên kết ấn phẩm

Nếu loại SDV của bạn là chủ đề (ấn phẩm), hãy sử dụng publication_mapping. Thao tác này liên kết cấu trúc của dữ liệu (type_definition) và Mã sự kiện SOME/IP hoặc Mã EventGroup, sau đó liên kết các chủ đề SDV cụ thể với các thực thể 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
      }
    }
  }
}

Ví dụ về ánh xạ giao diện RPC

Nếu loại SDV của bạn là giao diện RPC, hãy sử dụng rpc_interface_mapping. Liên kết tên quy trình SDV với các thực thể SOME/IP method_id và liên kết các kênh SDV với các thực thể 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
      }
    }
  }
}

Ánh xạ dịch vụ SOME/IP

someip_service_mapping định cấu hình cách một dịch vụ SOME/IP cụ thể (được phát hiện hoặc cung cấp trên mạng) liên kết với các chủ đề và kênh SDV. Nền tảng này cho phép ánh xạ các sự kiện và RPC được tham số hoá phức tạp.

Cấu trúc ánh xạ dịch vụ SOME/IP

  • someip_service_id, version_major, version_minor: Xác định dịch vụ SOME/IP.
  • sd_behavior (không bắt buộc): Xác định hành vi khám phá dịch vụ (EXACT_OR_ANY_MINOR_VERSION hoặc MINIMUM_MINOR_VERSION)

  • instance: Tham số hoá các đơn vị dịch vụ và chủ đề SDV cho các phiên bản instance_id cụ thể của SOME/IP.

  • instance_impl: Mô tả việc triển khai thực thể, liên kết các sự kiện hoặc phương thức với các đơn vị dịch vụ được tham số hoá.

Ví dụ về việc liên kết sự kiện

Ví dụ này liên kết một sự kiện SOME/IP với một chủ đề SDV. Thao tác này sử dụng instance để ánh xạ mã nhận dạng 1 đến chuỗi ký tự 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) ...
        }
      }
    }
  }
}

Ví dụ về mối liên kết RPC

Ví dụ này ánh xạ một dịch vụ RPC SOME/IP với một giao diện RPC SDV. Tương tự như các mối liên kết sự kiện, dịch vụ này sử dụng thực thể để tham số hoá tên đơn vị dịch vụ. Điều này tương ứng với tên kênh RPC trong SDV. Khối instance_impl sau đó xác định một phiên bản của offered_interface để liên kết method_id SOME/IP với tên quy trình 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
      }
    }
  }
}

Các tính năng nâng cao

Phần này mô tả các tính năng nâng cao được ánh xạ SOME/IP hỗ trợ.

Sự kiện cho nhóm

group_event cho phép một sự kiện SOME/IP duy nhất được phân tách và liên kết với nhiều chủ đề SDV cùng một lúc. Việc này được thực hiện bằng cách chỉ định nhiều mục event_part và sử dụng field_name_mapping để liên kết tên trường tải trọng SOME/IP đến với tên trường tải trọng 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"
      }
    }
  }
}

Ánh xạ kiểu "bắn và quên"

Các phương thức SOME/IP fire and forget (F&F) không có phương thức tương đương trực tiếp trong các giao diện SDV RPC. Thay vào đó, chúng được gọi bằng cách liên kết một chủ đề SDV (ấn phẩm) với phương thức F&F bằng cách sử dụng publication_mapping. Khi dữ liệu được xuất bản vào chủ đề SDV tương ứng, broker sẽ dịch dữ liệu đó thành một lệnh gọi phương thức SOME/IP F&F.

Để định cấu hình chế độ này, bạn phải đặt someip_ff_methods: true trong khối offered_topic và cung cấp thông tin chi tiết về định tuyến fire_and_forget_method của đích đến trong 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
        }
      }
    }
  }
}