মিডলওয়্যার তৈরি করুন

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

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

VSIDLC ইনপুট এবং আউটপুট

চিত্র ১. ভিএসআইডিএলসি-এর ইনপুট ও আউটপুট।

চিত্রটির ব্যাখ্যা নিচে দেওয়া হলো:

  1. ইনপুট হিসেবে, আপনি ক্যাটালগ নামে পরিচিত ডিরেক্টরির মধ্যে সাজানো নিম্নলিখিত ফাইলগুলি প্রদান করেন:

    • প্রোটো ফাইল (যার এক্সটেনশন .proto ) -এ এমন ডেটা স্ট্রাকচার থাকে যা VSIDL দ্বারা সংজ্ঞায়িত সার্ভিস ইউনিটগুলোর মধ্যে আদান-প্রদান করা হয়।
    • VSIDL ফাইল (যার এক্সটেনশন .vsidl ) সার্ভিস বান্ডেল, সার্ভিস ইউনিট এবং ইউনিট টাইপের মালিকানা নির্ধারণ করে।
    • প্রতিটি ক্যাটালগ ডিরেক্টরিতে থাকা Android.bp ফাইলগুলো ক্যাটালগের অন্তর্ভুক্ত সমস্ত প্রোটো ফাইলের জন্য rust_protobuf বিল্ড টার্গেট নির্ধারণ করে। VSIDLC, রাস্টে তৈরি হওয়া প্রোটোবাফ মেসেজ টাইপগুলোকে রেফারেন্স করার জন্য এই টার্গেটগুলোতে নির্দিষ্ট করা crate_name ব্যবহার করে।
  2. নিম্নলিখিত ফাইলগুলি আউটপুট করার জন্য আপনি 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 চালাতে:

  1. যদি আপনি আপনার পরিবেশ সেট আপ না করে থাকেন, source build/envsetup.sh চালান।

  2. VSIDLC বিল্ড করতে নিম্নলিখিত কমান্ডটি চালান:

    m vsidlc
    
  3. আপনার VSIDL ক্যাটালগ ডিরেক্টরিতে প্রয়োজনীয় বিল্ড, প্রোটোবাফ এবং VSIDL ফাইলগুলো আছে কিনা তা নিশ্চিত করুন।

  4. 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 নির্ভরতা ট্রি-এর একটি উদাহরণ।

ট্রি-এর প্রতিটি ক্যাটালগের জন্য মিডলওয়্যার তৈরি করতে, আপনাকে নিম্নলিখিত কমান্ডগুলি চালাতে হবে:

লক্ষ্য ক্যাটালগ নির্ভরশীলতা আদেশ
এসডিভি কোর ক্যাটালগ প্রযোজ্য নয় 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
    

এরপর কী?

মিডলওয়্যার তৈরি করার পর, আপনার ব্যবসায়িক যুক্তি বাস্তবায়ন দেখুন।