กำหนดข้อความและบริการ RPC

ระบบประเภทของ VSIDLC ทำงานใน 2 ระดับ ได้แก่ Protobuf และ VSIDL โดย Protobuf ใช้เพื่อกำหนดข้อความที่แลกเปลี่ยนระหว่างผู้เผยแพร่โฆษณาและผู้สมัครรับข้อมูลที่กำหนดโดย VSIDL ส่วน VSIDL จะอ้างอิงประเภทที่ประกาศโดย Protobuf

หน้านี้อธิบายวิธีกำหนดข้อความและเมธอดการเรียกกระบวนงานระยะไกล (RPC) สำหรับการเรียกและตอบสนองต่อคำขอ

กำหนดข้อความ

ส่วนนี้จะอธิบายวิธีกำหนดข้อความใน VSIDL และ Protobuf

ตัวอย่างโค้ดต่อไปนี้กำหนดข้อความ TirePressure

syntax = "proto3";

package com.android.sdv.sample.vsidl;

message TirePressure {
  uint32 pressure = 1;
}

กำหนดบริการ RPC

ใน Protobuf บริการ RPC จะกำหนดชุดเมธอดที่เรียกจากระยะไกลได้ราวกับเป็นการเรียกใช้ฟังก์ชันในเครื่อง ตัวอย่างต่อไปนี้กำหนดประเภทข้อความคำขอและการตอบกลับ รวมถึงเมธอดบริการ RPC ที่ใช้ในการส่งคำขอและรับการตอบกลับ

syntax = "proto3";

package com.google.sdv;

enum SeatHeatingLevel {
  OFF = 0;
  LOW = 1;
  HIGH = 2;
}

// Request to set seat heating
message SetSeatHeatingRequest {
  enum Seat {
    DRIVER = 0;
    PASSENGER = 1;
  }
  Seat seat = 1;
  SeatHeatingLevel level = 2;
}

// Response to setting seat heating
message SetSeatHeatingResponse {
  bool success = 1;
}

// Seat heating service
service SeatHeatingService {
  rpc SetSeatHeating (SetSeatHeatingRequest) returns (SetSeatHeatingResponse);
}

โดยมีรายละเอียดดังนี้

  • service ระบุคอลเล็กชันของเมธอด RPC ที่เกี่ยวข้อง
  • rpc ระบุเมธอด RPC เดียวที่มีประเภทข้อความอินพุตและเอาต์พุต (SetSeatHeatingRequest และ SetSeatHeatingResponse ตามลำดับ)

กำหนดค่าการผสานรวมระบบบิลด์

หากต้องการให้ vsidlc ค้นพบคำจำกัดความของ Protobuf และอนุญาตให้ระบบบิลด์ของ Android คอมไพล์คำจำกัดความเหล่านั้น คุณต้องใส่ไฟล์ Android.bp ไว้ในโฟลเดอร์บนสุดของไดเรกทอรีแคตตาล็อก

ไฟล์นี้ต้องกำหนดเป้าหมาย rust_protobuf ที่จัดกลุ่มไฟล์ Protobuf (ที่มีนามสกุล .proto) คุณต้องระบุไฟล์ทั้งหมดในแคตตาล็อกใน filegroup หากมี filegroup หลายรายการในไฟล์ Android.bp ระบบ vsidlc จะใช้รายการแรก

ตัวอย่างต่อไปนี้แสดงเป้าหมาย rust_protobuf ทั่วไปสำหรับแคตตาล็อก VSIDL

  rust_protobuf {
      name: "liboem_vehicle_messages",
      crate_name: "oem_vehicle_messages",
      source_stem: "oem_vehicle_messages_source",
      protos: [
          "**/*.proto",
      ],
      rustlibs: [
          "libvsidl_v1_proto_rs",
      ],
      proto_flags: [
          "-I external/protobuf/src",
      ],
      apex_available: [
          "//apex_available:platform",
          "//apex_available:anyapex",
      ],
      vendor_available: true,
      product_available: true,
      min_sdk_version: "35",
  }

  filegroup {
      name: "catalog_oem_vehicle_messages",
      srcs: ["**/*"],
  }

โดยมีรายละเอียดดังนี้

  • name: ตัวระบุที่ไม่ซ้ำกันสำหรับเป้าหมายบิลด์ โดยทั่วไปแล้วจะเริ่มต้นด้วย lib
  • crate_name: ชื่อของ Rust crate ที่สร้างขึ้น
  • protos: รายการไฟล์ Protobuf ทั้งหมดในแคตตาล็อก ระบบรองรับ Globs เช่น **/*.proto
  • rustlibs: ต้องมี libvsidl_v1_proto_rs เพื่อให้คำอธิบายประกอบและประเภท SDV มาตรฐาน
  • proto_flags: ใช้เพื่อระบุเส้นทางรวม โดยมักจะต้องใช้ -I external/protobuf/src เพื่อแก้ปัญหาประเภท Protobuf มาตรฐาน
  • min_sdk_version: ตั้งค่าเป็น "35" (Android 15) เพื่อประกาศความเข้ากันได้กับ API แพลตฟอร์ม SDV ที่เกี่ยวข้องและข้อกำหนดของ Rust toolchain
  • filegroup: จำเป็นสำหรับการค้นพบในเวลาบิลด์ ใส่ไฟล์ VSIDL, Protobuf และ Android.bp ทั้งหมดใน srcs เพื่อให้ระบบบิลด์คัดลอกไฟล์เหล่านั้นลงในแซนด์บ็อกซ์การคอมไพล์ได้

ขั้นตอนถัดไป

หากต้องการใช้สถาปัตยกรรมบริการต่อ โปรดดูหัวข้อ กำหนดสถาปัตยกรรม บริการ