Menentukan pesan dan layanan RPC

Sistem jenis VSIDLC beroperasi pada dua tingkat: Protobuf dan VSIDL. Protobuf digunakan untuk menentukan pesan yang dipertukarkan antara penayang dan pelanggan yang ditentukan oleh VSIDL. VSIDL mereferensikan jenis yang dideklarasikan oleh protobuf.

Halaman ini menjelaskan cara menentukan pesan dan metode panggilan prosedur jarak jauh (RPC) untuk memanggil dan merespons permintaan.

Menentukan pesan

Bagian ini menjelaskan cara pesan ditentukan dalam VSIDL dan protobuf.

Contoh kode berikut menentukan pesan TirePressure:

syntax = "proto3";

package com.android.sdv.sample.vsidl;

message TirePressure {
  uint32 pressure = 1;
}

Menentukan layanan RPC

Di protobuf, layanan RPC menentukan serangkaian metode yang dapat dipanggil dari jarak jauh seolah-olah merupakan panggilan fungsi lokal. Contoh berikut menentukan jenis pesan permintaan dan respons serta metode layanan RPC yang digunakan untuk membuat permintaan dan menerima respons:

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

Dengan:

  • service mengidentifikasi kumpulan metode RPC terkait.
  • rpc mengidentifikasi satu metode RPC dengan jenis pesan input dan output (SetSeatHeatingRequest dan SetSeatHeatingResponse, masing-masing).

Mengonfigurasi integrasi sistem build

Untuk mengaktifkan vsidlc agar dapat menemukan definisi protobuf Anda dan memungkinkan sistem build Android mengompilasinya, Anda harus menyertakan file Android.bp di folder teratas direktori katalog Anda.

File ini harus menentukan target rust_protobuf yang mengelompokkan file protobuf Anda (dengan ekstensi .proto). Setiap file dalam katalog Anda harus diperhitungkan dalam grup file. Jika ada beberapa grup file dalam file Android.bp, vsidlc akan mengambil grup file pertama.

Contoh berikut menunjukkan target rust_protobuf umum untuk katalog 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: ["**/*"],
  }

Dengan:

  • name: ID unik untuk target build. Menurut konvensi, ini dimulai dengan lib.
  • crate_name: Nama crate Rust yang dihasilkan.
  • protos: Daftar semua file protobuf dalam katalog. Glob seperti **/*.proto didukung.
  • rustlibs: Harus menyertakan libvsidl_v1_proto_rs untuk memberikan anotasi dan jenis SDV standar.
  • proto_flags: Digunakan untuk menentukan jalur sertakan. -I external/protobuf/src sering kali diperlukan untuk menyelesaikan jenis protobuf standar.
  • min_sdk_version: Ditetapkan ke "35" (Android 15) untuk menyatakan kompatibilitas dengan API platform SDV yang sesuai dan persyaratan toolchain Rust.
  • filegroup: Diperlukan untuk penemuan waktu build. Sertakan setiap file VSIDL, protobuf, dan Android.bp di srcs sehingga sistem build dapat menyalinnya ke dalam sandbox kompilasi.

Langkah berikutnya

Untuk melanjutkan penerapan arsitektur layanan, lihat Menentukan arsitektur layanan.