Das Typsystem von VSIDLC arbeitet auf zwei Ebenen: Protobuf und VSIDL. Mit Protobuf werden Nachrichten definiert, die zwischen dem Publisher und den von VSIDL definierten Abonnenten ausgetauscht werden. VSIDL verweist auf Typen, die von Protobuf deklariert wurden.
Auf dieser Seite wird erläutert, wie Sie Nachrichten und Remote-Prozeduraufruf (RPC)-Methoden definieren, um Anfragen aufzurufen und darauf zu antworten.
Nachrichten definieren
In diesem Abschnitt wird erläutert, wie Nachrichten in VSIDL und Protobuf definiert werden.
Im folgenden Codebeispiel wird eine TirePressure-Nachricht definiert:
syntax = "proto3";
package com.android.sdv.sample.vsidl;
message TirePressure {
uint32 pressure = 1;
}
RPC-Dienste definieren
In Protobuf definiert ein RPC-Dienst eine Reihe von Methoden, die remote aufgerufen werden können, als wären es lokale Funktionsaufrufe. Im folgenden Beispiel werden Nachrichten- und Antwortnachrichtentypen sowie die RPC-Dienstmethode definiert, die zum Senden einer Anfrage und zum Empfangen einer Antwort verwendet wird:
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);
}
Wobei:
serviceidentifiziert eine Sammlung verwandter RPC-Methoden.rpcidentifiziert eine einzelne RPC-Methode mit Eingabe- und Ausgabenachrichtentypen (SetSeatHeatingRequestbzw.SetSeatHeatingResponse).
Build-System-Integration konfigurieren
Damit vsidlc Ihre Protobuf-Definitionen erkennen und das Android-Build-System sie kompilieren kann, müssen Sie eine Android.bp-Datei in den obersten Ordner Ihres Katalogverzeichnisses einfügen.
In dieser Datei muss ein rust_protobuf-Ziel definiert sein, das Ihre Protobuf-Dateien (mit der Erweiterung .proto) gruppiert.
Jede Datei in Ihrem Katalog muss in einer Dateigruppe berücksichtigt werden. Wenn in der Datei Android.bp mehrere Dateigruppen vorhanden sind, verwendet vsidlc die erste.
Das folgende Beispiel zeigt ein typisches rust_protobuf-Ziel für einen VSIDL-Katalog:
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: ["**/*"],
}
Wobei:
name: Eine eindeutige Kennung für das Build-Ziel. Standardmäßig beginnt diese mitlib.crate_name: Der Name der generierten Rust-Crate.protos: Eine Liste aller Protobuf-Dateien im Katalog. Globs wie**/*.protowerden unterstützt.rustlibs: Musslibvsidl_v1_proto_rsenthalten, um die Standard-SDV-Annotationen und -Typen bereitzustellen.proto_flags: Wird verwendet, um Include-Pfade anzugeben.-I external/protobuf/srcist oft erforderlich, um Standard-Protobuf-Typen aufzulösen.min_sdk_version: Auf"35"(Android 15) festgelegt, um die Kompatibilität mit den entsprechenden SDV-Plattform-APIs und den Anforderungen an die Rust-Toolchain zu deklarieren.filegroup: Für die Ermittlung zur Build-Zeit erforderlich. Fügen Sie alle VSIDL-, Protobuf- undAndroid.bp-Dateien insrcsein, damit das Build-System sie in die Kompilierungs-Sandbox kopieren kann.
Nächste Schritte
Informationen zum weiteren Implementieren Ihrer Dienstarchitektur finden Sie unter Dienstarchitektur definieren.