AIDL VHAL android.hardware.automotive.vehicle namespace
সংজ্ঞায়িত করা হয়েছে। 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) |
কলব্যাকগুলিকে 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 প্রপার্টির জন্য, একটি প্রপার্টি ইভেন্ট ঘটে যখন একটি প্রপার্টির মান বা প্রপার্টির স্থিতি পরিবর্তন হয়।SharedMemoryFileCount সবসময় 0 হয়। | |
oneway void onPropertySetError(in VehiclePropErrors errors) onSetValues ব্যবহার করতে হবে। |
আরও তথ্যের জন্য, IVEhicle.aidl এবং IVEhicleCallback.aidl দেখুন।
VHAL বাস্তবায়ন VHAL VTS দ্বারা VtsHalAutomotiveVehicle_TargetTest.cpp- এ যাচাই করা হয়েছে। পরীক্ষাটি যাচাই করে যে মৌলিক পদ্ধতিগুলি সঠিকভাবে প্রয়োগ করা হয়েছে এবং সমর্থিত সম্পত্তি কনফিগারেশনগুলি সঠিক।
যানবাহনের সম্পত্তির মূল্য
প্রতিটি সম্পত্তির মান বর্ণনা করতে VehiclePropValue
কাঠামো ব্যবহার করুন, যার এই ক্ষেত্রগুলি রয়েছে:
মাঠ | বর্ণনা |
---|---|
timestamp | টাইমস্ট্যাম্প যে সময়টি ইভেন্টটি ঘটেছিল এবং SystemClock.elapsedRealtimeNano() ঘড়ির সাথে সিঙ্ক্রোনাইজ করে। |
prop | এই মানের জন্য প্রপার্টি আইডি। |
areaid | এই মানের জন্য এলাকা আইডি। এলাকাটি অবশ্যই এলাকা আইডি কনফিগারেশনে তালিকাভুক্ত সমর্থিত এলাকাগুলির মধ্যে একটি হতে হবে, অথবা গ্লোবাল প্রপার্টির জন্য 0 । |
value | প্রকৃত সম্পত্তি মান ধারণকারী একটি ডেটা কাঠামো। সম্পত্তির প্রকারের উপর ভিত্তি করে, এই ক্ষেত্রের মধ্যে এক বা একাধিক ক্ষেত্র প্রকৃত মান সংরক্ষণ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, value.int32Values এর প্রথম উপাদানটি Int32 প্রকারের বৈশিষ্ট্যগুলির জন্য ব্যবহৃত হয়। বিস্তারিত জানার জন্য, সম্পত্তি কনফিগারেশন দেখুন। |
অ্যাসিঙ্ক্রোনাস 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. }