ভেহিকেল সার্ভিসেস ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (VSIDL) মিডলওয়্যারটি সফটওয়্যার ডিফাইন্ড ভেহিকেল (SDV) কমিউনিকেশন স্ট্যাকের উপরে একটি অ্যাবস্ট্রাকশন লেয়ার তৈরি করে এমন একগুচ্ছ রাস্ট লাইব্রেরি সংজ্ঞায়িত করে, যা SDV ইকোসিস্টেমের ব্যবহারকে সহজ করে তোলে। এই মিডলওয়্যারটি সার্ভিসগুলোকে একে অপরের সাথে যোগাযোগ ও মিথস্ক্রিয়া করার জন্য একটি প্রমিত পদ্ধতি প্রদান করে। VSIDLC দ্বারা জেনারেট করা কোড এবং আপনার নিজস্ব কোড উভয়ই এই লাইব্রেরিগুলো ব্যবহার করে।
ভেহিকেল সার্ভিসেস ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ কম্পাইলার (VSIDLC) ডেফিনিশনগুলো যাচাই করে, বিল্ড প্রক্রিয়ার সময় রাস্ট মিডলওয়্যার কোড তৈরির জন্য genrule টার্গেট সম্বলিত বিল্ড ফাইল ( Android.bp ) তৈরি করে এবং একটি ক্যাটালগে থাকা VSIDL ও প্রোটোবাফ ফাইলগুলো থেকে ডিপ্লয়মেন্ট কনফিগারেশন তৈরি করে। চিত্র ১-এ VSIDLC-এর ইনপুট এবং এর দ্বারা উৎপাদিত আউটপুট দেখানো হয়েছে:

চিত্র ১. ভিএসআইডিএলসি-এর ইনপুট ও আউটপুট।
চিত্রটির ব্যাখ্যা নিচে দেওয়া হলো:
ইনপুট হিসেবে, আপনি ক্যাটালগ নামে পরিচিত ডিরেক্টরির মধ্যে সাজানো নিম্নলিখিত ফাইলগুলি প্রদান করেন:
- প্রোটো ফাইল (যার এক্সটেনশন
.proto) -এ এমন ডেটা স্ট্রাকচার থাকে যা VSIDL দ্বারা সংজ্ঞায়িত সার্ভিস ইউনিটগুলোর মধ্যে আদান-প্রদান করা হয়। - VSIDL ফাইল (যার এক্সটেনশন
.vsidl) সার্ভিস বান্ডেল, সার্ভিস ইউনিট এবং ইউনিট টাইপের মালিকানা নির্ধারণ করে। - প্রতিটি ক্যাটালগ ডিরেক্টরিতে থাকা
Android.bpফাইলগুলো ক্যাটালগের অন্তর্ভুক্ত সমস্ত প্রোটো ফাইলের জন্যrust_protobufবিল্ড টার্গেট নির্ধারণ করে। VSIDLC, রাস্টে তৈরি হওয়া প্রোটোবাফ মেসেজ টাইপগুলোকে রেফারেন্স করার জন্য এই টার্গেটগুলোতে নির্দিষ্ট করাcrate_nameব্যবহার করে।
- প্রোটো ফাইল (যার এক্সটেনশন
নিম্নলিখিত ফাইলগুলি আউটপুট করার জন্য আপনি VSIDLC চালান:
প্রতিটি সার্ভিস বান্ডেলের ফোল্ডারের মধ্যে
Android.bpফাইলগুলো তৈরি হয়। আপনি যদি--genruleসেট করেন, তাহলে এই টার্গেটগুলো বিল্ড প্রক্রিয়ার সময় হালনাগাদ রাস্ট ফাইল তৈরি করে এবং প্রয়োজনীয়rust_protobufলাইব্রেরির নির্ভরতাগুলো অন্তর্ভুক্ত করে।প্রতিটি সার্ভিস বান্ডেলের জন্য
service_bundle.rsফাইল তৈরি করা হয় এবং এতে মিডলওয়্যার কম্পোনেন্টগুলোর সাথে যোগাযোগের জন্য প্রধানstructও ফাংশনগুলো থাকে।একটি বান্ডেলের মালিকানাধীন প্রতিটি আরপিসি সার্ভিসের জন্য
lib.rsফাইল তৈরি করা হয় এবং আরপিসি সার্ভিসের নামে একটি সাবফোল্ডারে রাখা হয়। এই ফাইলগুলোতে অন্তর্ভুক্ত থাকে:একটি
Interfaceট্রেইট সার্ভার-সাইড লজিক বাস্তবায়ন করে।একটি
Clientস্ট্রাকচার একটি আরপিসি সার্ভিসকে কল করে।VSIDL ফাইলে যদি একটি
diagnostics_declarationউপস্থিত থাকে, তাহলেdiagnostics.rsফাইলগুলো তৈরি হয়, যা UDS-ভিত্তিক ডায়াগনস্টিকসের জন্য প্রয়োজনীয় বাইন্ডিং সরবরাহ করে।--apexফ্ল্যাগ ব্যবহার করলে ডেপ্লয়মেন্ট এবং সিকিউরিটি কনফিগারেশন তৈরি হয়। এগুলোapex/এবংconfigs/ডিরেক্টরিতে রাখা হয় এবং এর মধ্যে সার্ভিস-টু-সার্ভিস যোগাযোগের জন্য প্রয়োজনীয় অর্কেস্ট্রেশন.textprotoফাইল ও সিকিউরিটি পলিসি (পারমিশন) অন্তর্ভুক্ত থাকে।--servicesফ্ল্যাগ ব্যবহার করলে একটি সার্ভিস বয়লারপ্লেট তৈরি হয়। এটিservices/ডিরেক্টরিতে রাখা হয় এবং এতে আপনার ইমপ্লিমেন্টেশন দ্রুত শুরু করার জন্য একটিmain.rsফাইলসহ একটি রাস্ট অ্যাপ্লিকেশন স্কেলেটন থাকে।
VSIDLC চালান
VSIDLC চালাতে:
যদি আপনি আপনার পরিবেশ সেট আপ না করে থাকেন,
source build/envsetup.shচালান।VSIDLC বিল্ড করতে নিম্নলিখিত কমান্ডটি চালান:
m vsidlcআপনার VSIDL ক্যাটালগ ডিরেক্টরিতে প্রয়োজনীয় বিল্ড, প্রোটোবাফ এবং VSIDL ফাইলগুলো আছে কিনা তা নিশ্চিত করুন।
vsidlcকমান্ডটি চালান:vsidlc -c path_to_catalog -o output_directory -pকোথায়:
-
-c path_to_catalogপ্রধান ক্যাটালগ ডিরেক্টরির পথ নির্দেশ করে। -
-o output_directoryসেই প্যারেন্ট ডিরেক্টরিকে শনাক্ত করে যেখানেgenerated_rsআউটপুট ডিরেক্টরিটি তৈরি করা হয়। - (ঐচ্ছিক)
--apexঅর্কেস্ট্রেশন এবং নিরাপত্তা কনফিগারেশন আর্টিফ্যাক্ট তৈরি করে। - (ঐচ্ছিক)
--servicesএকটি জাম্পস্টার্ট রাস্ট অ্যাপ্লিকেশন স্কেলেটন তৈরি করে। - (ঐচ্ছিক)
-pনতুন ফাইল তৈরি করার আগে বিদ্যমান তৈরি হওয়া ডিরেক্টরিগুলো (যেমনgenerated_rs, এবং প্রযোজ্য ক্ষেত্রেapex,configsবাservices) মুছে ফেলে। - (ঐচ্ছিক)
--genruleরাস্ট কোডের পরিবর্তেAndroid.bpজেনরুল তৈরি করে। এই জেনরুলগুলোmচালানোর সময় তাৎক্ষণিকভাবে প্রয়োজনীয় রাস্ট কোড তৈরি করে, যাতে তৈরি হওয়া আর্টিফ্যাক্টগুলোকে ভার্সন কন্ট্রোলের আওতায় আনা এড়ানো যায়।
একটি
generated_rsডিরেক্টরি তৈরি করা হয়, যার মধ্যে একটিAndroid.bpএবং জেনারেট করা মিডলওয়্যার ফাইলগুলো থাকে। এই ডিরেক্টরিটি আপনার সংজ্ঞায়িত সার্ভিস বান্ডেলগুলোর সম্পূর্ণ নামের সাথে সঙ্গতিপূর্ণ সাবডিরেক্টরিগুলোর মধ্যে সংগঠিত থাকে।-
নির্ভরতা পরিচালনা করুন
ডিফল্টরূপে, VSIDLC শুধুমাত্র প্রধান ক্যাটালগের জন্য কোড তৈরি করে, ডিপেন্ডেন্সি ক্যাটালগগুলোর জন্য নয়। যদি আপনার ক্যাটালগ অন্য ক্যাটালগে সংজ্ঞায়িত টাইপ বা সার্ভিস ইউনিট ব্যবহার করে, তাহলে -d ফ্ল্যাগ ব্যবহার করে প্রতিটি ডিপেন্ডেন্সি ক্যাটালগের পাথ উল্লেখ করুন:
vsidlc -c path_to_catalog -o output_directory -d dep1_path -d dep2_path ...
আপনাকে অবশ্যই সম্পূর্ণ ডিপেন্ডেন্সি গ্রাফের পাথ প্রদান করতে হবে, যার মধ্যে ট্রানজিটিভ ডিপেন্ডেন্সি (ডিপেন্ডেন্সির ডিপেন্ডেন্সি) অন্তর্ভুক্ত থাকবে। উদাহরণস্বরূপ, ধরুন আপনার কাছে নিম্নলিখিত ক্যাটালগ ডিপেন্ডেন্সি ট্রি রয়েছে:

চিত্র ২. VSIDLC নির্ভরতা ট্রি-এর একটি উদাহরণ।
ট্রি-এর প্রতিটি ক্যাটালগের জন্য মিডলওয়্যার তৈরি করতে, আপনাকে নিম্নলিখিত কমান্ডগুলি চালাতে হবে:
| লক্ষ্য ক্যাটালগ | নির্ভরশীলতা | আদেশ |
|---|---|---|
| এসডিভি কোর ক্যাটালগ | প্রযোজ্য নয় | vsidlc -o ./generated -c ./path/to/sdv_core_catalog |
| ডায়াগনস্টিকস ক্যাটালগ | এসডিভি কোর ক্যাটালগ | vsidlc -o ./generated -c ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
| SOMEIP ক্যাটালগ | ডায়াগনস্টিকস ক্যাটালগ, এসডিভি কোর ক্যাটালগ | vsidlc -o ./generated -c ./path/to/someip_catalog -d ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
| OEM ক্যাটালগ | ডায়াগনস্টিকস ক্যাটালগ, SOMEIP ক্যাটালগ, (সকর্মকভাবে) SDV কোর ক্যাটালগ | vsidlc -o ./generated -c ./path/to/oem_catalog -d ./path/to/someip_catalog -d ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
রাস্ট আউটপুট ফরম্যাট করুন
By default, VSIDL uses rustfmt to format Rust output. For the default to work properly, set the $ANDROID_BUILD_TOP environment variable or the RUSTFMT_PATH and RUSTFMT_TOML_PATH environment variables. To change the default format that Rust outputs, use --rust-formatter option with either pretty-please or none :
আউটপুট ফরম্যাট পরিবর্তন করে
prettypleaseতৈরি করতে,pretty-pleaseভ্যালুটি ব্যবহার করুন:vsidlc -c path_to_catalog -o output_directory -p --rust-formatter pretty-pleaseআউটপুট ফরম্যাট 'none'-এ পরিবর্তন করতে, '
noneভ্যালুটি ব্যবহার করুন:vsidlc -c path_to_catalog -o output_directory -p --rust-formatter none
এরপর কী?
মিডলওয়্যার তৈরি করার পর, আপনার ব্যবসায়িক যুক্তি বাস্তবায়ন দেখুন।