मैसेज और आरपीसी सेवाएं तय करना

वीएसआईडीएलसी का टाइप सिस्टम, दो लेवल पर काम करता है: प्रोटोबफ़ और वीएसआईडीएल. प्रोटोबफ़ का इस्तेमाल, ऐसे मैसेज तय करने के लिए किया जाता है जो पब्लिशर और वीएसआईडीएल से तय किए गए सदस्यों के बीच शेयर किए जाते हैं. वीएसआईडीएल, प्रोटोबफ़ से तय किए गए टाइप को रेफ़र करता है.

इस पेज पर, अनुरोधों को कॉल करने और उनका जवाब देने के लिए, मैसेज और रिमोट प्रोसीजर कॉल (आरपीसी) के तरीके तय करने का तरीका बताया गया है.

मैसेज तय करना

इस सेक्शन में, वीएसआईडीएल और प्रोटोबफ़ में मैसेज तय करने का तरीका बताया गया है.

यहां दिए गए कोड सैंपल में, TirePressure मैसेज तय किया गया है:

syntax = "proto3";

package com.android.sdv.sample.vsidl;

message TirePressure {
  uint32 pressure = 1;
}

आरपीसी सेवाएं तय करना

प्रोटोबफ़ में, आरपीसी सेवा, तरीकों का एक सेट तय करती है. इन्हें रिमोट से कॉल किया जा सकता है. ऐसा तब किया जा सकता है, जब ये लोकल फ़ंक्शन कॉल के तौर पर काम कर रहे हों. यहां दिए गए उदाहरण में, अनुरोध और जवाब के मैसेज टाइप और अनुरोध करने और जवाब पाने के लिए इस्तेमाल किए जाने वाले आरपीसी सेवा के तरीके के बारे में बताया गया है:

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 , इनपुट और आउटपुट मैसेज टाइप (SetSeatHeatingRequest और SetSeatHeatingResponse, क्रमशः) के साथ, आरपीसी के एक तरीके की पहचान करता है.

बिल्ड सिस्टम इंटिग्रेशन कॉन्फ़िगर करना

vsidlc को प्रोटोबफ़ की परिभाषाएं खोजने और Android के बिल्ड सिस्टम को उन्हें कंपाइल करने की अनुमति देने के लिए, आपको अपने कैटलॉग डायरेक्ट्री के सबसे ऊपर वाले फ़ोल्डर में, Android.bp फ़ाइल शामिल करनी होगी.

इस फ़ाइल में, rust_protobuf टारगेट तय किया जाना चाहिए. यह टारगेट, आपकी प्रोटोबफ़ फ़ाइलों (जिनका एक्सटेंशन .proto है) को ग्रुप करता है. आपके कैटलॉग में मौजूद हर फ़ाइल को, फ़ाइल ग्रुप में शामिल किया जाना चाहिए. अगर Android.bp फ़ाइल में एक से ज़्यादा फ़ाइल ग्रुप हैं, तो vsidlc पहले फ़ाइल ग्रुप को लेता है.

यहां दिए गए उदाहरण में, वीएसआईडीएल कैटलॉग के लिए, rust_protobuf का सामान्य टारगेट दिखाया गया है:

  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: जनरेट किए गए रस्ट क्रेट का नाम.
  • protos: कैटलॉग में मौजूद सभी प्रोटोबफ़ फ़ाइलों की सूची. **/*.proto जैसे ग्लोब का इस्तेमाल किया जा सकता है.
  • rustlibs: इसमें, स्टैंडर्ड एसडीवी एनोटेशन और टाइप देने के लिए, libvsidl_v1_proto_rs शामिल होना चाहिए.
  • proto_flags: इसका इस्तेमाल, पाथ शामिल करने के लिए किया जाता है. अक्सर, स्टैंडर्ड प्रोटोबफ़ टाइप को हल करने के लिए, -I external/protobuf/src की ज़रूरत होती है.
  • min_sdk_version: इसे "35" (Android 15) पर सेट करें, ताकि एसडीवी प्लैटफ़ॉर्म के एपीआई और रस्ट टूलचेन की ज़रूरी शर्तों के साथ काम करने की सुविधा का एलान किया जा सके.
  • filegroup: बिल्ड के दौरान, खोज की सुविधा के लिए ज़रूरी है. srcs में, हर वीएसआईडीएल, प्रोटोबफ़, और Android.bp फ़ाइल शामिल करें, ताकि बिल्ड सिस्टम उन्हें कंपाइलेशन सैंडबॉक्स में कॉपी कर सके.

अगला कदम क्या है

अपनी सेवा के आर्किटेक्चर को लागू करने के लिए, सेवा का आर्किटेक्चर तय करना लेख पढ़ें.