AIDL VHAL android.hardware.automotive.vehicle namespace সংজ্ঞায়িত করা হয়েছে। VHAL ইন্টারফেসটি IVehicle.aidl এ সংজ্ঞায়িত করা হয়েছে। নির্দিষ্ট না করা পর্যন্ত, সমস্ত পদ্ধতি একটি নির্দিষ্ট VHAL সংস্করণের জন্য প্রয়োগ করা আবশ্যক।
সংস্করণ
| অ্যান্ড্রয়েড সংস্করণ | সর্বশেষ VHAL সংস্করণ | সর্বশেষ VHAL সম্পত্তি সংস্করণ | ন্যূনতম সামঞ্জস্যপূর্ণ VHAL সংস্করণ |
|---|---|---|---|
| অ্যান্ড্রয়েড 16 | V4 | V4 | V1 |
| অ্যান্ড্রয়েড 15 | V3 | V3 | V1 |
| অ্যান্ড্রয়েড 14 | V2 | V2 | V1 |
| অ্যান্ড্রয়েড 13 | V1 | (VHAL সম্পত্তি ইন্টারফেস বিভক্ত নয়) | V1 |
একটি নির্দিষ্ট অ্যান্ড্রয়েড সংস্করণের জন্য সর্বশেষ VHAL সংস্করণ বাস্তবায়ন করার জন্য এটি সুপারিশ করা হয়।
ফাংশন এবং কলব্যাক
VHAL ফাংশনগুলি IVehicle.aidl এ সংজ্ঞায়িত করা হয়েছে।
| পদ্ধতি | |
|---|---|
VehiclePropConfigs getAllPropConfigs() | |
VehiclePropConfigs getPropConfigs(in int[] props) | |
void getValues(IVehicleCallback callback, in GetValueRequests requests)GetValueRequest এর একটি ব্যাচ অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করে। ফলাফল কলব্যাকের onGetValues পদ্ধতির মাধ্যমে বিতরণ করা হয়। | |
void setValues(IVehicleCallback callback, in SetValueRequests requests)SetValueRequest এর একটি ব্যাচ অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করে। ফলাফল কলব্যাকের onSetValues পদ্ধতির মাধ্যমে বিতরণ করা হয়। | |
void subscribe(in IVehicleCallback callback, in SubscribeOptions[] options, int maxSharedMemoryFileCount)maxSharedMemoryFileCount ব্যবহার করা হয় না। | |
void unsubscribe(in IVehicleCallback callback, in int[] propIds) | |
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId) | |
( Android 16 এ নতুন )SupportedValuesListResults getSupportedValuesLists(in List | |
( Android 16 এ নতুন )MinMaxSupportedValueResults getMinMaxSupportedValue(in List | |
void registerSupportedValueChangeCallback(in IVehicleCallback callback, in List | |
void unregisterSupportedValueChangeCallback(in IVehicleCallback callback, in List | |
কলব্যাকগুলি IVehicleCallback.aidl এ সংজ্ঞায়িত করা হয়েছে এবং এই পদ্ধতিগুলি ধারণ করে৷
| পদ্ধতি | |
|---|---|
oneway void onGetValues(in GetValueResults responses)getValues ফাংশনের জন্য কলব্যাক মান ফলাফল প্রদান করতে. আনার জন্য কিছু মান প্রস্তুত হলে কল করা হয়। | |
oneway void onSetValues(in SetValueResults responses)setValues ফাংশনের জন্য কলব্যাক। VHAL কিছু সম্পত্তি সেট অনুরোধ পরিচালনা করা শেষ হলে কল করা হয়। | |
oneway void onPropertyEvent(in VehiclePropValues propValues, int sharedMemoryFileCount)CONTINUOUS সম্পত্তি, Hz বা যানবাহনের বাস মেসেজ ফ্রিকোয়েন্সিতে সাবস্ক্রাইব নমুনা হারের উপর ভিত্তি করে একটি সম্পত্তি ঘটনা ঘটে। একটি সম্পত্তি ইভেন্ট এছাড়াও ঘটতে পারে যদি একটি সম্পত্তি স্থিতি পরিবর্তন. উদাহরণস্বরূপ, অনুপলব্ধ থেকে উপলব্ধ।ON_CHANGE প্রপার্টির জন্য, একটি প্রপার্টি ইভেন্ট ঘটে যখন একটি প্রপার্টির মান বা প্রপার্টির স্থিতি পরিবর্তন হয়।VehiclePropValue এবং একটি খালি মান সরবরাহ করা উচিত৷SharedMemoryFileCount সবসময় 0 হয়। | |
oneway void onPropertySetError(in VehiclePropErrors errors)onSetValues ব্যবহার করতে হবে। | |
oneway void onSupportedValueChange(in ListgetMinMaxSupportedValue বা getSupportedValuesLists কল করার কথা। | |
VHAL বাস্তবায়ন VHAL VTS দ্বারা VtsHalAutomotiveVehicle_TargetTest.cpp এ যাচাই করা হয়েছে।
পরীক্ষাটি যাচাই করে যে মৌলিক পদ্ধতিগুলি সঠিকভাবে প্রয়োগ করা হয়েছে এবং সমর্থিত সম্পত্তি কনফিগারেশনগুলি সঠিক। পরীক্ষাটি ডিভাইসে সমস্ত VHAL দৃষ্টান্তের বিরুদ্ধে চলে, তবে, AAOS শুধুমাত্র ডিফল্ট উদাহরণ ব্যবহার করে ( android.hardware.automotive.vehicle.IVehicle/default )
যানবাহনের সম্পত্তির মূল্য
প্রতিটি সম্পত্তির মান বর্ণনা করতে VehiclePropValue কাঠামো ব্যবহার করুন, যার এই ক্ষেত্রগুলি রয়েছে:
| মাঠ | বর্ণনা |
|---|---|
timestamp | টাইমস্ট্যাম্প যে সময়টি ইভেন্টটি ঘটেছিল এবং SystemClock.elapsedRealtimeNano() ঘড়ির সাথে সিঙ্ক্রোনাইজ করে। |
prop | এই মানের জন্য প্রপার্টি আইডি। |
areaid | এই মানের জন্য এলাকা আইডি। এলাকাটি অবশ্যই এলাকা আইডি কনফিগারেশনে তালিকাভুক্ত সমর্থিত এলাকাগুলির মধ্যে একটি হতে হবে, অথবা গ্লোবাল প্রপার্টির জন্য 0 । |
value | প্রকৃত সম্পত্তি মান ধারণকারী একটি ডেটা কাঠামো। সম্পত্তির প্রকারের উপর ভিত্তি করে, এই ক্ষেত্রের মধ্যে এক বা একাধিক ক্ষেত্র প্রকৃত মান সংরক্ষণ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, value.int32Values এর প্রথম উপাদানটি Int32 প্রকারের বৈশিষ্ট্যগুলির জন্য ব্যবহৃত হয়। বিস্তারিত জানার জন্য, সম্পত্তি কনফিগারেশন দেখুন। |
status | পড়ার জন্য সম্পত্তির অবস্থা। পঠন/লেখা সম্পত্তির জন্য, এটি লেখার জন্যও প্রযোজ্য হতে পারে তবে নিশ্চিত নয়, উদাহরণস্বরূপ, সম্পত্তিটি পড়ার জন্য উপলব্ধ হতে পারে কিন্তু লেখার জন্য উপলব্ধ নয়। এই ধরনের ক্ষেত্রে, স্ট্যাটাস AVAILABLE এবং মান ক্ষেত্রে বৈধ তথ্য থাকে। সম্ভাব্য অবস্থার জন্য, VehiclePropertyStatus দেখুন। |
অ্যাসিঙ্ক্রোনাস getValues এবং setValues
getValues এবং setValues অপারেশনগুলি অ্যাসিঙ্ক্রোনাসভাবে সঞ্চালিত হয়, যার অর্থ প্রকৃত গেট বা সেট অপারেশন সম্পূর্ণ হওয়ার আগে ফাংশনটি ফিরে আসতে পারে। অপারেশন ফলাফল (উদাহরণস্বরূপ, getValues এর জন্য সম্পত্তি মান এবং setValues এর সাফল্য বা ত্রুটির স্থিতি) আর্গুমেন্ট হিসাবে পাস করা কলব্যাকের মাধ্যমে বিতরণ করা হয়।
অনুরোধটি পরিচালনাকারী বাইন্ডার থ্রেডের ফলাফলে বাস্তবায়ন অবশ্যই ব্লক করা উচিত নয়। পরিবর্তে, আমরা আপনাকে অনুরোধটি একটি অনুরোধ সারিতে সংরক্ষণ করার পরামর্শ দিই এবং অনুরোধগুলিকে অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করতে একটি পৃথক হ্যান্ডলার থ্রেড ব্যবহার করুন৷ বিস্তারিত জানার জন্য রেফারেন্স বাস্তবায়ন দেখুন।
চিত্র 1. অ্যাসিঙ্ক্রোনাস প্রক্রিয়া।
বড় পার্সেবল
XXXs নামক সমস্ত কাঠামো, যেমন VehiclePropConfigs , SetValueRequests , এবং VehiclePropValues কে বলা হয় LargeParcelable (বা, StableLargeParcelable )। প্রতিটি বাইন্ডারের সীমানা জুড়ে বাইন্ডারের সীমাবদ্ধতা ( LargeParcelable লাইব্রেরি বাস্তবায়নে 4KB) অতিক্রম করতে পারে এমন বড় ডেটা পাস করতে ব্যবহৃত মানগুলির একটি তালিকা উপস্থাপন করে। প্রতিটির একটি অনুরূপ গঠন সংজ্ঞা রয়েছে যা নিম্নলিখিত ক্ষেত্রগুলি ধারণ করে।
| নির্দেশনা | বর্ণনা |
|---|---|
payloads | মানগুলির তালিকা যখন মান আকার একটি বাইন্ডার মেমরি সীমাবদ্ধতার মধ্যে ফিট করে, বা একটি খালি তালিকা। |
sharedMemoryFd | নালযোগ্য ফাইল বর্ণনাকারী একটি শেয়ার করা মেমরি ফাইলের দিকে নির্দেশ করে যা মানের তালিকা খুব বড় হলে সিরিয়ালাইজড পেলোড সংরক্ষণ করে। |
উদাহরণস্বরূপ, VehiclePropConfigs এইভাবে সংজ্ঞায়িত করা হয়েছে:
parcelable VehiclePropConfigs { // The list of vehicle property configs if they fit the binder memory // limitation. VehiclePropConfig[] payloads; // Shared memory file to store configs if they exceed binder memory // limitation. Created by VHAL, readable only at client. Client could keep // the fd opened or keep the FD mapped to access configs. @nullable ParcelFileDescriptor sharedMemoryFd; }
VehiclePropConfigs হয় অ-খালি পেলোড বা একটি নন-নাল sharedMemoryFd রয়েছে।
- যদি
payloadsখালি না থাকে তবে এটি প্রকৃত ডেটার একটি তালিকা সংরক্ষণ করে, যা সম্পত্তি কনফিগারেশন। -
sharedMemoryFdনাল না হলে, এতে একটি শেয়ার করা মেমরি ফাইল রয়েছে, যাVehiclePropConfigsএর ক্রমিক কাঠামো সংরক্ষণ করে। কাঠামোটি একটি পার্সেলকে সিরিয়ালাইজ করতেwriteToParcelফাংশন ব্যবহার করে।
VHAL-এর জাভা ক্লায়েন্ট হিসাবে, কার সার্ভিস LargeParcelable জন্য সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন পরিচালনা করে। VHAL বাস্তবায়ন এবং নেটিভ ক্লায়েন্টদের জন্য, একটি LargeParcelable LargeParcelable লাইব্রেরি বা ParcelableUtils.h এ লাইব্রেরির জন্য একটি দরকারী র্যাপার ক্লাসের সাথে সিরিয়ালাইজড এবং ডিসিরিয়ালাইজ করা উচিত।
উদাহরণস্বরূপ, একটি বাইন্ডার থেকে প্রাপ্ত getValues জন্য একটি নেটিভ ক্লায়েন্ট পার্সিং অনুরোধ নিম্নরূপ:
// 'requests' are from the binder. GetValueRequests requests; expected<LargeParcelableBase::BorrowedOwnedObject, ScopedAStatus> deserializedResults = fromStableLargeParcelable(requests); if (deserializedResults.ok()) { const std::vector & getValueRequests = deserializedResults.value().getObject()->payloads; // Use the getValueRequests. } else { // handle error. }
একটি নমুনা VHAL বাস্তবায়ন যা বাইন্ডারের মাধ্যমে getValues জন্য ফলাফল পাঠায় তা নীচে দেখানো হয়েছে:
std::vectorresults = getResults(); GetValueResults parcelableResults; ScopedAStatus status = vectorToStableLargeParcelable(std::move(results), &parcelableResults); if (status.isOk()) { // Send parcelableResults through callback. } else { // Handle error. }