VHAL ইন্টারফেস

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()
এই গাড়ির HAL দ্বারা সমর্থিত সমস্ত সম্পত্তি কনফিগারেশনের একটি তালিকা প্রদান করে।
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)
নির্দিষ্ট বিকল্প সহ সম্পত্তি ইভেন্ট সদস্যতা. সাবস্ক্রাইব বিকল্পগুলির মধ্যে রয়েছে প্রপার্টি আইডি, প্রপার্টি এরিয়া আইডি এবং Hz-এ নমুনা হার (একটি ক্রমাগত সম্পত্তির জন্য)। maxSharedMemoryFileCount ব্যবহার করা হয় না।
void unsubscribe(in IVehicleCallback callback, in int[] propIds)
নির্দিষ্ট বৈশিষ্ট্যগুলির জন্য পূর্বে সদস্যতা নেওয়া সম্পত্তি ইভেন্টগুলি আনসাবস্ক্রাইব করে৷
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId)
ব্যবহার করা হয় না এবং নো-অপ হিসাবে প্রয়োগ করা যেতে পারে।
( Android 16 এ নতুন )
SupportedValuesListResults getSupportedValuesLists(in List propIdAreaIds)
নির্দিষ্ট সম্পত্তি আইডি এবং এলাকা আইডি জোড়ার জন্য সমর্থিত মান তালিকা পায়।
VHAL V4 তে চালু করা হয়েছে।
( Android 16 এ নতুন )
MinMaxSupportedValueResults getMinMaxSupportedValue(in List propIdAreaIds)
নির্দিষ্ট সম্পত্তি আইডি এবং এলাকা আইডি জোড়ার জন্য সর্বনিম্ন এবং সর্বাধিক সমর্থিত মান পায়।
VHAL V4 তে চালু করা হয়েছে।
void registerSupportedValueChangeCallback(in IVehicleCallback callback, in List propIdAreaIds)
সমর্থিত মান পরিবর্তন হলে কল করার জন্য একটি কলব্যাক নিবন্ধন করে।
VHAL V4 তে চালু করা হয়েছে।
void unregisterSupportedValueChangeCallback(in IVehicleCallback callback, in List propIdAreaIds)
সমর্থিত মান পরিবর্তন কলব্যাক নিবন্ধনমুক্ত করে।
VHAL V4 তে চালু করা হয়েছে।

কলব্যাকগুলি 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 List propIdAreaIds)
ন্যূনতম এবং সর্বাধিক সমর্থিত মান বা সমর্থিত মান তালিকা পরিবর্তনের রিপোর্ট করার জন্য কলব্যাক। কলকারীর আপডেট মানগুলি পেতে getMinMaxSupportedValue বা 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::vector results = getResults();
GetValueResults parcelableResults;
ScopedAStatus status = vectorToStableLargeParcelable(std::move(results), &parcelableResults);
if (status.isOk()) {
    // Send parcelableResults through callback.
} else {
    // Handle error.
}