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ıylaSetSeatHeatingRequestveSetSeatHeatingResponse) 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 olaraklibile başlar.crate_name: Oluşturulan Rust paketinin adı.protos: Katalogdaki tüm protobuf dosyalarının listesi.**/*.protogibi glob'lar desteklenir.rustlibs: Standart SDV açıklamalarını ve türlerini sağlamak içinlibvsidl_v1_proto_rsiç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/srcgereklidir.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çinsrcs'ye her VSIDL, protobuf veAndroid.bpdosyasını ekleyin.
Sonraki adımlar
Hizmet mimarinizi uygulamaya devam etmek için Hizmet mimarisini tanımlama başlıklı makaleyi inceleyin.