מערכת הסוגים של VSIDLC פועלת בשתי רמות: 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, בהתאמה).
הגדרת שילוב של מערכת build
כדי לאפשר ל-vsidlc לגלות את הגדרות ה-protobuf ולאפשר למערכת ה-build של Android לקמפל אותן, צריך לכלול קובץ Android.bp בתיקייה העליונה של ספריית הקטלוג.
בקובץ הזה צריך להגדיר rust_protobuf יעד שמקבץ את קובצי ה-protobuf (עם הסיומת .proto). כל קובץ בקטלוג צריך להיות כלול בקבוצת קבצים. אם יש כמה קבוצות קבצים בקובץ 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 שנוצרה.-
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. filegroup: נדרש לגילוי בזמן ה-build. צריך לכלול כל קובץ VSIDL, protobuf ו-Android.bpב-srcsכדי שמערכת ה-build תוכל להעתיק אותם לארגז החול של הקומפילציה.
המאמרים הבאים
כדי להמשיך בהטמעה של ארכיטקטורת השירות, אפשר לעיין במאמר בנושא הגדרת ארכיטקטורת השירות.