ระบบประเภทของ VSIDLC ทำงานใน 2 ระดับ ได้แก่ 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ตามลำดับ)
กำหนดค่าการผสานรวมระบบบิลด์
หากต้องการให้ vsidlc ค้นพบคำจำกัดความของ Protobuf และอนุญาตให้ระบบบิลด์ของ Android คอมไพล์คำจำกัดความเหล่านั้น คุณต้องใส่ไฟล์ Android.bp ไว้ในโฟลเดอร์บนสุดของไดเรกทอรีแคตตาล็อก
ไฟล์นี้ต้องกำหนดเป้าหมาย rust_protobuf ที่จัดกลุ่มไฟล์ Protobuf (ที่มีนามสกุล .proto)
คุณต้องระบุไฟล์ทั้งหมดในแคตตาล็อกใน filegroup หากมี filegroup หลายรายการในไฟล์ 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: ตัวระบุที่ไม่ซ้ำกันสำหรับเป้าหมายบิลด์ โดยทั่วไปแล้วจะเริ่มต้นด้วยlibcrate_name: ชื่อของ Rust crate ที่สร้างขึ้นprotos: รายการไฟล์ Protobuf ทั้งหมดในแคตตาล็อก ระบบรองรับ Globs เช่น**/*.protorustlibs: ต้องมีlibvsidl_v1_proto_rsเพื่อให้คำอธิบายประกอบและประเภท SDV มาตรฐานproto_flags: ใช้เพื่อระบุเส้นทางรวม โดยมักจะต้องใช้-I external/protobuf/srcเพื่อแก้ปัญหาประเภท Protobuf มาตรฐานmin_sdk_version: ตั้งค่าเป็น"35"(Android 15) เพื่อประกาศความเข้ากันได้กับ API แพลตฟอร์ม SDV ที่เกี่ยวข้องและข้อกำหนดของ Rust toolchainfilegroup: จำเป็นสำหรับการค้นพบในเวลาบิลด์ ใส่ไฟล์ VSIDL, Protobuf และAndroid.bpทั้งหมดในsrcsเพื่อให้ระบบบิลด์คัดลอกไฟล์เหล่านั้นลงในแซนด์บ็อกซ์การคอมไพล์ได้
ขั้นตอนถัดไป
หากต้องการใช้สถาปัตยกรรมบริการต่อ โปรดดูหัวข้อ กำหนดสถาปัตยกรรม บริการ