আমরা AIDL VHAL এর জন্য একটি রেফারেন্স বাস্তবায়ন প্রদান করি। প্রধান পরিষেবা থ্রেড VehicleService.cpp
এ প্রয়োগ করা হয়। VHAL ইন্টারফেস বাস্তবায়ন DefaultVehicleHal.cpp
এ অবস্থিত।
রেফারেন্স বাস্তবায়ন একটি দ্বি-স্তর আর্কিটেকচারের উপর ভিত্তি করে। উপরের স্তরে, DefaultVehicleHal
, VHAL AIDL ইন্টারফেস প্রয়োগ করে এবং সমস্ত হার্ডওয়্যার ডিভাইসে VHAL লজিক জেনেরিক প্রদান করে। নিম্ন স্তরে, FakeVehicleHardware
, IVehicleHardware
ইন্টারফেস প্রয়োগ করে। এই ক্লাসটি আসল হার্ডওয়্যার বা যানবাহনের বাসের সাথে ইন্টারঅ্যাক্ট করার VHAL যুক্তির অনুকরণ করে এবং এটি ডিভাইস-নির্দিষ্ট। ঐচ্ছিকভাবে, বিক্রেতারা এই একই আর্কিটেকচারকে মানিয়ে নিতে পারে, একই DefaultVehicleHal
ক্লাস পুনরায় ব্যবহার করতে পারে (একটি পদ্ধতি ওভাররাইট করার জন্য এটিকে প্রসারিত করে), এবং তাদের নিজস্ব IVehicleHardware
বাস্তবায়ন প্রদান করতে পারে।
DefaultVehicleHal
নিম্নলিখিত যুক্তি রয়েছে, যা জেনেরিক বলে বিবেচিত হয় এবং যেকোন VHAL বাস্তবায়নে প্রয়োগ করতে পারে।
-
IVehicle
ইন্টারফেস প্রয়োগ করে। - ডুপ্লিকেট আইডিগুলির জন্য একটি চেক সহ মৌলিক ইনপুট চেকগুলি সম্পাদন করে৷
- প্রতিটি বাইন্ডার ক্লায়েন্টের জন্য প্রতিটি অপারেশনের জন্য ক্লায়েন্ট অবজেক্টগুলি (উদাহরণস্বরূপ,
GetValuesClient
) বরাদ্দ করে এবং প্রতিটিকে একটি গ্লোবাল পুলে যোগ করে। - অ্যাসিঙ্ক কলব্যাক লজিক পরিচালনা করে, যেমন একটি মুলতুবি অনুরোধ পুলে একটি মুলতুবি থাকা অনুরোধ যোগ করা। আমরা যখন ফলাফল পাই তখন মুলতুবি থাকা অনুরোধগুলি সমাধান করে বা মুলতুবি থাকা অনুরোধগুলির একটির সময় শেষ হলে ত্রুটি ফেরত দেয়৷
-
LargeParcelable
সিরিয়ালাইজ করে এবং ডিসিরিয়ালাইজ করে (দেখুনParcelableUtils.h
)। - সদস্যতা পরিচালনা করে (
SubscriptionManager.h
দেখুন)। - অনুমতি পরীক্ষা করে। (
checkReadPermission
এবংcheckWritePermission
ফাংশন দেখুন)। - পর্যায়ক্রমে IVEhicleHardware.checkHealth কল করে এবং হার্টবিট সিগন্যাল পাঠায় (
checkHealth
ফাংশন দেখুন)।
IVehicleHardware
হল একটি জেনেরিক ইন্টারফেস যা VHAL-এর হার্ডওয়্যার-নির্দিষ্ট বাস্তবায়নের প্রতিনিধিত্ব করতে ব্যবহৃত হয়। IVehicleHardware
এর জন্য রেফারেন্স বাস্তবায়ন হল FakeVehicleHardware
, যা সম্পত্তির মান সঞ্চয় করার জন্য একটি ইন-মেমরি মানচিত্র ব্যবহার করে এবং প্রকৃত যানবাহনের বাসের সাথে যোগাযোগ করে না। এটি একটি এমুলেটরে চালানোর উদ্দেশ্যে এবং কোন হার্ডওয়্যার-নির্দিষ্ট নির্ভরতা নেই। ভেন্ডর ইমপ্লিমেন্টেশন অবশ্যই এটিকে ব্যবহার করবেন না এবং গাড়ির বাস-নির্দিষ্ট যুক্তি যোগ করতে হবে।
Android 14-এ, FakeVehicleHardware
ডিভাইসের /vendor/etc/automotive/vhalconfig/
ফোল্ডার থেকে শুরু করার সময় রান-টাইমে সমর্থিত প্রপার্টি কনফিগারেশন পড়ে, যেটিতে একটি JSON-স্টাইল কনফিগার ফাইল রয়েছে। কনফিগার ফাইল ফরম্যাট এবং কনফিগার ফাইল সামগ্রীর জন্য রেফারেন্স VHAL README ফাইলটি দেখুন।
FakeVehicleHardware
পরীক্ষার জন্য কনফিগার ফাইল ওভাররাইড সমর্থন করে। সিস্টেম প্রপার্টি persist.vendor.vhal_init_value_override
সেট করা থাকলে, এটি বিদ্যমান কনফিগারেশন ওভাররাইড করতে ডিভাইসে /vendor/etc/automotive/vhaloverride/
ফোল্ডার থেকে কনফিগার ফাইল ব্যবহার করে। একটি বিক্রেতা বাস্তবায়ন একটি অনুরূপ পদ্ধতি ব্যবহার করতে পারে যাতে VHAL- সমর্থিত সম্পত্তি কনফিগারেশন হার্ড কোডেড না হয় এবং শুরুর সময় গতিশীলভাবে সিদ্ধান্ত নেওয়া যায়। ডিভাইসটি চালু হওয়ার পরে গাড়ির সম্পত্তি কনফিগার অবশ্যই স্থির হতে হবে।
আমরা AIDL VHAL এর জন্য একটি রেফারেন্স বাস্তবায়ন প্রদান করি। প্রধান পরিষেবা থ্রেড VehicleService.cpp
এ প্রয়োগ করা হয়। VHAL ইন্টারফেস বাস্তবায়ন DefaultVehicleHal.cpp
এ অবস্থিত।
রেফারেন্স বাস্তবায়ন একটি দ্বি-স্তর আর্কিটেকচারের উপর ভিত্তি করে। উপরের স্তরে, DefaultVehicleHal
, VHAL AIDL ইন্টারফেস প্রয়োগ করে এবং সমস্ত হার্ডওয়্যার ডিভাইসে VHAL লজিক জেনেরিক প্রদান করে। নিম্ন স্তরে, FakeVehicleHardware
, IVehicleHardware
ইন্টারফেস প্রয়োগ করে। এই ক্লাসটি আসল হার্ডওয়্যার বা যানবাহনের বাসের সাথে ইন্টারঅ্যাক্ট করার VHAL যুক্তির অনুকরণ করে এবং এটি ডিভাইস-নির্দিষ্ট। ঐচ্ছিকভাবে, বিক্রেতারা এই একই আর্কিটেকচারকে মানিয়ে নিতে পারে, একই DefaultVehicleHal
ক্লাস পুনরায় ব্যবহার করতে পারে (একটি পদ্ধতি ওভাররাইট করার জন্য এটিকে প্রসারিত করে), এবং তাদের নিজস্ব IVehicleHardware
বাস্তবায়ন প্রদান করতে পারে।
DefaultVehicleHal
নিম্নলিখিত যুক্তি রয়েছে, যা জেনেরিক বলে বিবেচিত হয় এবং যেকোন VHAL বাস্তবায়নে প্রয়োগ করতে পারে।
-
IVehicle
ইন্টারফেস প্রয়োগ করে। - ডুপ্লিকেট আইডিগুলির জন্য একটি চেক সহ মৌলিক ইনপুট চেকগুলি সম্পাদন করে৷
- প্রতিটি বাইন্ডার ক্লায়েন্টের জন্য প্রতিটি অপারেশনের জন্য ক্লায়েন্ট অবজেক্টগুলি (উদাহরণস্বরূপ,
GetValuesClient
) বরাদ্দ করে এবং প্রতিটিকে একটি গ্লোবাল পুলে যোগ করে। - অ্যাসিঙ্ক কলব্যাক লজিক পরিচালনা করে, যেমন একটি মুলতুবি অনুরোধ পুলে একটি মুলতুবি থাকা অনুরোধ যোগ করা। আমরা যখন ফলাফল পাই তখন মুলতুবি থাকা অনুরোধগুলি সমাধান করে বা মুলতুবি থাকা অনুরোধগুলির একটির সময় শেষ হলে ত্রুটি ফেরত দেয়৷
-
LargeParcelable
সিরিয়ালাইজ করে এবং ডিসিরিয়ালাইজ করে (দেখুনParcelableUtils.h
)। - সদস্যতা পরিচালনা করে (
SubscriptionManager.h
দেখুন)। - অনুমতি পরীক্ষা করে। (
checkReadPermission
এবংcheckWritePermission
ফাংশন দেখুন)। - পর্যায়ক্রমে IVEhicleHardware.checkHealth কল করে এবং হার্টবিট সিগন্যাল পাঠায় (
checkHealth
ফাংশন দেখুন)।
IVehicleHardware
হল একটি জেনেরিক ইন্টারফেস যা VHAL-এর হার্ডওয়্যার-নির্দিষ্ট বাস্তবায়নের প্রতিনিধিত্ব করতে ব্যবহৃত হয়। IVehicleHardware
এর জন্য রেফারেন্স বাস্তবায়ন হল FakeVehicleHardware
, যা সম্পত্তির মান সঞ্চয় করার জন্য একটি ইন-মেমরি মানচিত্র ব্যবহার করে এবং প্রকৃত যানবাহনের বাসের সাথে যোগাযোগ করে না। এটি একটি এমুলেটরে চালানোর উদ্দেশ্যে এবং কোন হার্ডওয়্যার-নির্দিষ্ট নির্ভরতা নেই। ভেন্ডর ইমপ্লিমেন্টেশন অবশ্যই এটিকে ব্যবহার করবেন না এবং গাড়ির বাস-নির্দিষ্ট যুক্তি যোগ করতে হবে।
Android 14-এ, FakeVehicleHardware
ডিভাইসের /vendor/etc/automotive/vhalconfig/
ফোল্ডার থেকে শুরু করার সময় রান-টাইমে সমর্থিত প্রপার্টি কনফিগারেশন পড়ে, যেটিতে একটি JSON-স্টাইল কনফিগার ফাইল রয়েছে। কনফিগার ফাইল ফরম্যাট এবং কনফিগার ফাইল সামগ্রীর জন্য রেফারেন্স VHAL README ফাইলটি দেখুন।
FakeVehicleHardware
পরীক্ষার জন্য কনফিগার ফাইল ওভাররাইড সমর্থন করে। সিস্টেম প্রপার্টি persist.vendor.vhal_init_value_override
সেট করা থাকলে, এটি বিদ্যমান কনফিগারেশন ওভাররাইড করতে ডিভাইসে /vendor/etc/automotive/vhaloverride/
ফোল্ডার থেকে কনফিগার ফাইল ব্যবহার করে। একটি বিক্রেতা বাস্তবায়ন একটি অনুরূপ পদ্ধতি ব্যবহার করতে পারে যাতে VHAL- সমর্থিত সম্পত্তি কনফিগারেশন হার্ড কোডেড না হয় এবং শুরুর সময় গতিশীলভাবে সিদ্ধান্ত নেওয়া যায়। ডিভাইসটি চালু হওয়ার পরে গাড়ির সম্পত্তি কনফিগার অবশ্যই স্থির হতে হবে।