Mesajları ve TBG hizmetlerini tanımlama

VSIDLC'nin tür sistemi iki düzeyde çalışır: Protobuf ve VSIDL. Protobuf, VSIDL tarafından tanımlanan yayıncı ve aboneler arasında değiş tokuş edilen mesajları tanımlamak için kullanılır. VSIDL, protobuf tarafından tanımlanan türlere referans verir.

Bu sayfada, istekleri çağırmak ve yanıtlara yanıt vermek için mesajların ve uzak prosedür çağrısı (RPC) yöntemlerinin nasıl tanımlanacağı açıklanmaktadır.

Mesajları tanımlama

Bu bölümde, iletilerin VSIDL ve protobuf'ta nasıl tanımlandığı açıklanmaktadır.

Aşağıdaki kod örneğinde bir TirePressure mesajı tanımlanmaktadır:

syntax = "proto3";

package com.android.sdv.sample.vsidl;

message TirePressure {
  uint32 pressure = 1;
}

TBG hizmetlerini tanımlama

Protobuf'ta bir UPÇ hizmeti, yerel işlev çağrıları gibi uzaktan çağrılabilen bir yöntemler grubu tanımlar. Aşağıdaki örnekte, bir istekte bulunmak ve yanıt almak için kullanılan istek ve yanıt mesajı türleri ile UPÇ hizmeti yöntemi tanımlanmaktadır:

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

Nerede:

  • service, ilgili RPC yöntemlerinin bir koleksiyonunu tanımlar.
  • rpc, giriş ve çıkış mesajı türlerine (sırasıyla SetSeatHeatingRequest ve SetSeatHeatingResponse) sahip tek bir RPC yöntemini tanımlar.

Derleme sistemi entegrasyonunu yapılandırma

vsidlc'nın protobuf tanımlarınızı bulmasını sağlamak ve Android derleme sisteminin bunları derlemesine izin vermek için katalog dizininizin en üstteki klasörüne bir Android.bp dosyası eklemeniz gerekir.

Bu dosya, protobuf dosyalarınızı (.proto uzantılı) gruplandıran bir rust_protobuf hedefi tanımlamalıdır. Kataloğunuzdaki her dosya bir dosya grubunda yer almalıdır. Android.bp dosyasında birden fazla dosya grubu varsa vsidlc ilk grubu alır.

Aşağıdaki örnekte, VSIDL kataloğu için tipik bir rust_protobuf hedefi gösterilmektedir:

  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: ["**/*"],
  }

Nerede:

  • name: Derleme hedefi için benzersiz tanımlayıcı. Bu tanımlayıcı, kural olarak lib ile başlar.
  • crate_name: Oluşturulan Rust paketinin adı.
  • protos: Katalogdaki tüm protobuf dosyalarının listesi. **/*.proto gibi glob'lar desteklenir.
  • rustlibs: Standart SDV açıklamalarını ve türlerini sağlamak için libvsidl_v1_proto_rs içermelidir.
  • proto_flags: Dahil etme yollarını belirtmek için kullanılır. Standart protobuf türlerini çözümlemek için genellikle -I external/protobuf/src gereklidir.
  • min_sdk_version: İlgili SDV platformu API'leri ve Rust araç zinciri gereksinimleriyle uyumluluğu bildirmek için "35" (Android 15) olarak ayarlayın.
  • filegroup: Derleme zamanında keşif için gereklidir. Derleme sisteminin bunları derleme korumalı alanına kopyalayabilmesi için srcs'ye her VSIDL, protobuf ve Android.bp dosyasını ekleyin.

Sonraki adımlar

Hizmet mimarinizi uygulamaya devam etmek için Hizmet mimarisini tanımlama başlıklı makaleyi inceleyin.