গাড়ির এমন তথ্য দেখানোর জন্য হাই অ্যাভেইলেবিলিটি রেন্ডারার (HAR) ব্যবহার করুন যা অ্যান্ড্রয়েড প্রদর্শন করতে পারে না। স্টার্ট-আপ, প্রাপ্যতা, নিরাপত্তা বা নিয়মকানুনের মতো সমস্যার কারণে এমনটা হতে পারে। HAR হলো রাস্ট (Rust) ভাষায় লেখা একটি পোর্টেবল, বিল্ট-ইন অ্যাপ।
HAR, যা HAR ফ্রেমওয়ার্ক নামেও পরিচিত, এর মধ্যে এমন কোড অন্তর্ভুক্ত রয়েছে যা অ্যাপ তৈরি করতে ব্যবহৃত হয়। HAR দিয়ে তৈরি একটি অ্যাপকে HAR-ভিত্তিক অ্যাপ বলা হয়। HAR ফ্রেমওয়ার্কে বিভিন্ন প্ল্যাটফর্মের জন্য কোড সেকশন রয়েছে। উদাহরণস্বরূপ, একটি লিনাক্স সিস্টেমে সাউন্ডের জন্য tinyalsa মতো লাইব্রেরি ব্যবহার করা হয়। QNX-এর নিজস্ব স্বতন্ত্র অডিও লাইব্রেরি রয়েছে।
একটি প্ল্যাটফর্মে হার্ডওয়্যার, একটি অপারেটিং সিস্টেম, সিস্টেম লাইব্রেরি এবং অন্যান্য উপাদান অন্তর্ভুক্ত থাকে। প্ল্যাটফর্ম-নির্দিষ্ট কোডের বিভিন্ন অংশ থাকে, যেগুলোকে সাবসিস্টেম বলা হয়। প্রতিটি সাবসিস্টেম প্ল্যাটফর্মের একটি বৈশিষ্ট্য পরিচালনা করে, যেমন অডিও, ইভিএস ক্যামেরা বা গাড়ির ডেটা। একটি প্ল্যাটফর্মকে সমর্থন করার জন্য, HAR ফ্রেমওয়ার্কের এর সমস্ত সাবসিস্টেম বাস্তবায়িত হওয়া প্রয়োজন।
প্ল্যাটফর্ম-নির্দিষ্ট সাবসিস্টেম কোড HAR-ভিত্তিক অ্যাপের সাথে একই প্রসেসে অথবা একটি আলাদা প্রসেসে চলতে পারে। যখন এটি আলাদা থাকে, তখন এই কোডটি ইন্টারপ্রসেস কমিউনিকেশন (IPC) পরিচালনা করে, যা প্ল্যাটফর্মটি অ্যাপটিকে সমর্থন করে কিনা তা যাচাই করতে সাহায্য করে। জটিল IPC পদ্ধতিগুলো অবশ্যই প্ল্যাটফর্ম-নির্দিষ্ট কোডের অংশ হতে হবে।
HAR টেস্ট স্যুট একটি প্ল্যাটফর্মের জন্য বাস্তবায়িত সমস্ত সাবসিস্টেমের উপর পরীক্ষা চালায়। প্ল্যাটফর্মগুলো HAR-এর প্রয়োজনীয়তা পূরণ করে কিনা তা যাচাই করতে এবং কোনো নতুন সমস্যা খুঁজে বের করতে এই স্যুটটি ব্যবহার করুন।
পরিভাষা
এই পরিভাষাগুলো এই পৃষ্ঠায় রয়েছে:
- HAR-ভিত্তিক অ্যাপ
- HAR ফ্রেমওয়ার্ক দিয়ে তৈরি একটি OEM বা নির্দিষ্ট কাজের অ্যাপ। অ্যাপগুলো তাদের অবস্থা এবং অন্যান্য পরিবর্তনযোগ্য বৈশিষ্ট্যের কারণে ভিন্ন হয়ে থাকে।
- HAR কাঠামো
- অ্যাপ তৈরির জন্য প্রয়োজনীয় কিছু মৌলিক টুল সরবরাহ করে।
- HAR প্ল্যাটফর্ম অ্যাবস্ট্রাকশন
- HAR ফ্রেমওয়ার্কের একটি অংশ যা একটি পরিচিত API প্রদান করে, যা সকল টার্গেট প্ল্যাটফর্মকে অবশ্যই বাস্তবায়ন করতে হবে।
- HAR টেস্ট স্যুট
- প্ল্যাটফর্ম ইমপ্লিমেন্টেশনগুলোর উপর পরিচালিত একাধিক পরিচিত পরীক্ষা, যা একটি নির্দিষ্ট প্ল্যাটফর্মে HAR ফ্রেমওয়ার্ককে সমর্থন করে কিনা তা যাচাই করতে সাহায্য করে।
আওতার বাইরে
HAR নিম্নলিখিত বিষয়গুলো নিয়ে আলোচনা করে না:
সকল প্ল্যাটফর্ম টার্গেটের জন্য স্বতন্ত্র বাস্তবায়ন: টার্গেট প্ল্যাটফর্মগুলোর জন্য বাস্তবায়ন। এর পরিবর্তে, এই পৃষ্ঠাটি সেই ইন্টারফেসগুলো বর্ণনা করে যা প্ল্যাটফর্ম বাস্তবায়নগুলোকে অবশ্যই পূরণ করতে হবে এবং একটি টেস্ট স্যুটকে অবশ্যই সন্তুষ্ট করতে হবে।
টেস্ট কেস: সমস্ত ইন্টারফেসের জন্য নির্দিষ্ট টেস্ট কেস। এর পরিবর্তে, এই পৃষ্ঠাটি ইন্টারফেসের জন্য স্বতন্ত্র ফাংশনগুলো বর্ণনা করে, যার মধ্যে আর্গুমেন্ট, রিটার্ন ভ্যালু, প্রত্যাশিত আচরণ এবং প্রত্যাশিত সাইড এফেক্ট অন্তর্ভুক্ত রয়েছে। এই পৃষ্ঠাটি টেস্ট স্যুট বর্ণনা করে, যেখানে আপনি টেস্ট কেসগুলো প্রয়োগ ও রান করতে পারেন।
প্ল্যাটফর্ম অ্যাবস্ট্রাকশন উচ্চ-স্তরের ক্রেট কাঠামো
রাস্ট প্রজেক্টগুলো ক্রেট নিয়ে গঠিত। চিত্র ১-এ HAR প্ল্যাটফর্ম অ্যাবস্ট্রাকশন লেয়ারের ক্রেট কাঠামো দেখানো হয়েছে। প্ল্যাটফর্ম অ্যাবস্ট্রাকশন লেয়ারটি দুই বা ততোধিক রাস্ট ক্রেটকে প্রভাবিত করে:
অ্যাবস্ট্রাকশন (রাস্ট
traitবর্ণনা) HAR ফ্রেমওয়ার্ক ক্রেটে রয়েছে।কোনো প্ল্যাটফর্মের জন্য ইমপ্লিমেন্টেশনগুলো একটি আলাদা
har-platform-xক্রেটের মাধ্যমে করা হয়। উদাহরণস্বরূপ,har-platform-linuxবাhar-platform-android।
একটি নির্দিষ্ট প্ল্যাটফর্ম ইমপ্লিমেন্টেশন ছাড়া আপনি HAR ক্রেটটি বিল্ড বা টেস্ট করতে পারবেন না। এটি ইচ্ছাকৃত, কারণ HAR ফ্রেমওয়ার্কটি নিজেই একটি ফ্রেমওয়ার্ক।
যে অ্যাপের জন্য একটি প্ল্যাটফর্ম নির্দিষ্ট করা থাকে, সেটিকে কাজ করতে ও পরীক্ষা করার জন্য অবশ্যই এই ফ্রেমওয়ার্ক দিয়ে তৈরি করতে হবে। HAR ফ্রেমওয়ার্ক এবং প্ল্যাটফর্মের মধ্যে সংযোগগুলো এই ডায়াগ্রামে দেখানো হয়েছে:
চিত্র ১. HAR ক্রেট।
প্রদর্শন-নিরাপত্তার মধ্যে সাধারণ কাঠামো
এই ডিজাইনটি display_safety রিপোজিটরিতে একাধিক নতুন ক্রেট যোগ করে, যেমনটি চিত্র ২-এ দেখানো হয়েছে:
চিত্র ২. বিমূর্তায়ন মডিউলসমূহ।
একটি টেস্ট স্যুট গঠনগতভাবে একটি অ্যাপের অনুরূপ, কিন্তু এটি শুধুমাত্র একটি নির্দিষ্ট প্ল্যাটফর্ম ইমপ্লিমেন্টেশন ক্রেটের উপর নির্ভর করে। টেস্ট স্যুটটিকে অবশ্যই HAR ফ্রেমওয়ার্কে সংজ্ঞায়িত ট্রেইট এবং স্ট্রাকচার উল্লেখ করতে হবে, কিন্তু এর চেয়ে জটিল কোনো ইমপ্লিমেন্টেশন উল্লেখ করা উচিত নয়।
প্ল্যাটফর্ম অ্যাবস্ট্রাকশন লেয়ারের উচ্চ-স্তরের বর্ণনা
এই সারণিতে HAR প্ল্যাটফর্ম অ্যাবস্ট্রাকশন লেয়ার দ্বারা সংজ্ঞায়িত প্ল্যাটফর্ম-নির্দিষ্ট সাবসিস্টেমগুলো বর্ণনা করা হয়েছে।
| বিমূর্ততার নাম | সম্পর্কিত ফাংশন | বর্ণনা | নোট |
|---|---|---|---|
OpenGL | ২ডি রেন্ডারিং | HAR ফ্রেমওয়ার্ক ক্রেট-এ OpenGLES 2.0/3.0 রেন্ডারিং সক্ষমতা প্রদান করে। | |
Audio | অডিও রেন্ডারিং | সিস্টেম অডিও পরিচালনা ও চালানোর জন্য অ্যান্ড্রয়েড সাউন্ডপুল- এর মতো একটি ইন্টারফেস প্রদান করে। | |
Camera | গাড়ির ক্যামেরা ডিসপ্লে | গাড়ির ক্যামেরার তথ্য পরিচালনা ও প্রদর্শনের জন্য একটি EVS HAL-এর মতো ইন্টারফেস প্রদান করে। | |
Looper | অ্যাপের প্রধান লুপ এবং ডিসপ্লে কনফিগারেশন | প্ল্যাটফর্ম-নির্দিষ্ট অ্যাপের প্রধান লুপ এবং ডিসপ্লে কনফিগারেশন পরিচালনা করার জন্য একটি অ্যান্ড্রয়েড লুপারের মতো ইন্টারফেস প্রদান করে। | |
UserInput | টাচ, কিবোর্ড, স্টিয়ারিং হুইল বা রোটারি কন্ট্রোলার, এবং অন্যান্য প্ল্যাটফর্ম-নির্দিষ্ট ইনপুট | HAR-ভিত্তিক অ্যাপগুলিতে টাচ এবং কীবোর্ড ইনপুট সরবরাহ করার জন্য একটি ইন্টারফেস প্রদান করে। Linux evdev এর উপর ভিত্তি করে তৈরি রেফারেন্স ইমপ্লিমেন্টেশনটি har-user-input-evdev এ রয়েছে। | |
VehicleData | গাড়ির অবস্থা ইনপুট | এটি HAR-ভিত্তিক অ্যাপগুলিতে অ্যান্ড্রয়েড VHAL বা CAN বাস দ্বারা সরবরাহকৃত যেকোনো যানবাহনের ডেটার একটি প্রবাহ সরবরাহ করার জন্য একটি ইন্টারফেস প্রদান করে। | |
ResourceManager | অ্যাপ-নির্দিষ্ট ক্যাশ করা ডিজাইন ডকুমেন্ট | HAR চালু করার জন্য প্রয়োজনীয় রিসোর্স, যেমন ক্যাশ করা ইমেজ এবং ডিজাইন ডকুমেন্ট, এর একটি ইন-মেমরি ক্যাশ প্রদান করে। এখনো কোনো ডিস্ক ক্যাশ বাস্তবায়ন করা হয়নি। | |
Logging | সিস্টেম লগিং এবং টেলিমেট্রি | ট্রেসিং সিস্টেম ব্যবহার করে প্ল্যাটফর্ম-নির্দিষ্ট লগিং সমর্থন প্রদান করে। এর মাধ্যমে প্ল্যাটফর্মের প্রয়োজন অনুযায়ী টেলিমেট্রি সংগ্রহ করা সম্ভব হয়। | |
Tracing | সিস্টেম ট্রেসিং | ট্রেসিং এবং প্রোফাইলিং সিস্টেমের সাথে সমন্বয়ের জন্য একটি বিমূর্ত কাঠামো প্রদান করে। | |
Monitoring | সিস্টেম পর্যবেক্ষণ | HAR ফ্রেমওয়ার্কের মধ্যে পারফরম্যান্স ও ল্যাটেন্সি নিরীক্ষণের জন্য টুলকিট। | |
Commlib | গাড়ির তথ্য | প্রোটোবাফ সিরিয়ালাইজেশন ব্যবহার করে একটি রেফারেন্স ইমপ্লিমেন্টেশন। অপ্রচলিত: reference/harry-control-api তে সংজ্ঞায়িত এপিআই এবং harry-grpcio-server ও harry-tonic-server (রেফারেন্স ইমপ্লিমেন্টেশন) ব্যবহার করুন। | |
TestSupport | টেস্টিং সাপোর্ট হুক | টেস্ট কেস তৈরি ও অপসারণ, টেস্ট ইভেন্ট তৈরি এবং টেস্ট আর্টিফ্যাক্ট নির্মাণে সহায়তা করে। উদাহরণস্বরূপ, UserInput পরীক্ষা করার জন্য সিমুলেটেড টাচ ইভেন্ট তৈরি করা এবং বিশ্লেষণের জন্য স্ক্রিনশট তৈরি করা। | প্রোডাকশন বিল্ডে অন্তর্ভুক্ত হওয়া আটকাতে রাস্ট এই ফিচারটি লক করে রেখেছে। |
নামকরণের নিয়মাবলী এবং কাঠামো গঠন
এই সারণিতে নিম্নলিখিত নাম ও কাঠামোসমূহ উপস্থাপন করা হয়েছে:
HAR ফ্রেমওয়ার্ক দ্বারা প্রদত্ত প্রত্যাশিত সাবসিস্টেম
traitইনস্ট্যান্সসমূহ। প্রতিটিtraitএকটি প্ল্যাটফর্ম-নির্দিষ্ট সাবসিস্টেমের প্রতিনিধিত্ব করে, যা অবশ্যই বাস্তবায়ন করতে হবে।যেকোনো প্ল্যাটফর্ম ক্রেটে প্ল্যাটফর্ম-নির্দিষ্ট সাবসিস্টেম ইমপ্লিমেন্টেশনের প্রত্যাশিত নামসমূহ। HAR-ভিত্তিক অ্যাপগুলো আশা করে যে এই নির্দিষ্ট নামগুলো ইমপ্লিমেন্ট করা হবে।
প্ল্যাটফর্ম-সম্পর্কিত ইমপ্লিমেন্টেশন থেকে HAR ফ্রেমওয়ার্কে তথ্য প্রেরণের জন্য সাধারণত সংশ্লিষ্ট HAR ফ্রেমওয়ার্ক
enumএবংstructইনস্ট্যান্সগুলো ব্যবহৃত হয়।
| বৈশিষ্ট্যের নাম | বাস্তবায়নের নাম | HAR ফ্রেমওয়ার্ক enum এবং structs |
|---|---|---|
GlContextFactory | OpenGL | trait harry::Rendererharry::DisplayRotation |
AudioApiFactory | Audio | harry::AudioApiharry::AudioDeviceharry::VolumeMillibel |
ICameraManager | Camera | harry::ICameraDeviceharry::CameraDescriptor |
Looper | Looper | harry::LooperMessageharry::LooperOptionsharry::DisplayId |
PlatformVehicleData | VehicleData | harry::VehicleDataTypeharry::VehicleDataListener |
ResourceManager (স্ট্রাকচার) | ResourceManager | harry::ResourceManagerMessageharry::ResourceTokenharry::RawImageData |
PlatformTracing | Tracing | প্রযোজ্য নয় |
HarPerformanceMonitor | Monitoring | harry::Rendererharry::ResolveLatencyToken |
PlatformTestSupport | TestSupport | harry::TestConfigharry::TestDisplayConfig |
ত্রুটি এবং ত্রুটি পরিচালনা
প্রস্তাবিত এপিআইগুলো রাস্টের Result<> টাইপ ব্যবহার করে। রাস্টের নিয়ম অনুযায়ী, ত্রুটিযুক্ত Result টাইপগুলো অবশ্যই চেক করতে হয়। অন্যথায়, কম্পাইলার একটি ওয়ার্নিং বা এরর তৈরি করে। বিল্ড-টাইম চেকের মাধ্যমে প্ল্যাটফর্ম-নির্দিষ্ট কোড থেকে এরর চেকিং নিশ্চিত করা হয়।
প্ল্যাটফর্ম ইমপ্লিমেন্টেশন দ্বারা ফেরত আসা ত্রুটিগুলি harry::error::Error টাইপের হয়ে থাকে। প্ল্যাটফর্মের ত্রুটির ধরণগুলি যাতে অ্যাপ কোডে প্রবেশ না করে, তা যাচাই করার জন্য HAR ফ্রেমওয়ার্ক দ্বারা প্রদত্ত স্ট্যান্ডার্ড ত্রুটির ধরণটি ব্যবহার করুন।
harry::error::Error টাইপটি প্রসারিত হয়ে সমস্ত সাবসিস্টেমের জন্য নির্দিষ্ট ত্রুটিগুলিও অন্তর্ভুক্ত করে:
// This is Rust
pub enum Error {
Msg(String), // A generic message string
// Legacy error type, likely to be removed or merged into Msg
Audio(String),
}
অপ্রত্যাহারযোগ্য ত্রুটিগুলো প্রধানত নির্ধারিত ইন্টারফেস এবং কলব্যাকের মাধ্যমে ফেরত দেওয়া হয়।
টেস্ট স্যুটের বিস্তারিত নকশা
এই অংশে টেস্ট স্যুটের নকশা বর্ণনা করা হয়েছে, যা অ্যাবস্ট্রাকশনগুলোর প্ল্যাটফর্ম-নির্দিষ্ট বাস্তবায়ন যাচাই করে।
টেস্ট স্যুট টেস্টগুলি তৈরি করুন
Soong বিল্ডগুলির জন্য (যা Android.bp ফাইল দ্বারা সংজ্ঞায়িত), টেস্টগুলি অ্যান্ড্রয়েড প্ল্যাটফর্ম বিল্ড সিস্টেমের অংশ হিসেবে কম্পাইল করা হয় এবং সেগুলির এক্সিকিউশন atest দ্বারা পরিচালিত হয়।
টেস্ট স্যুটটি চালান।
একটি স্বতন্ত্র প্ল্যাটফর্ম পরীক্ষা করতে:
প্রাসঙ্গিক টেস্ট টার্গেটের সাথে atest কমান্ডটি ব্যবহার করুন (উদাহরণস্বরূপ, atest <module_name> )। এই কমান্ডটি একটি অ্যান্ড্রয়েড ডিভাইস বা এমুলেটরে টেস্টগুলো ডেপ্লয় এবং রান করে।