AIDL VHAL की जानकारी
android.hardware.automotive.vehicle namespace
में दी गई है.
VHAL इंटरफ़ेस की जानकारी
IVehicle.aidl
पर दी गई है.
अगर कोई तरीका नहीं बताया गया है, तो सभी तरीके लागू करने होंगे.
Method | |
---|---|
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
में तय किए जाते हैं और इनमें ये तरीके शामिल होते हैं.
Method | |
---|---|
oneway void onGetValues(in GetValueResults responses)
getValues फ़ेच करने के लिए कुछ वैल्यू तैयार होने पर, इसे कॉल किया जाता है. |
|
oneway void onSetValues(in SetValueResults responses)
setValues फ़ंक्शन का कॉलबैक. यह तब कॉल किया जाता है, जब
VHAL, प्रॉपर्टी सेट के कुछ अनुरोधों को मैनेज कर लेता है. |
|
oneway void onPropertyEvent(in VehiclePropValues propValues, int sharedMemoryFileCount)
CONTINUOUS प्रॉपर्टी, प्रॉपर्टी इवेंट हर्ट्ज़ में 'सदस्यता लें' सैंपल रेट
या वाहन की बस के मैसेज फ़्रीक्वेंसी के आधार पर होता है. अगर प्रॉपर्टी का
स्टेटस बदलता है, तो भी प्रॉपर्टी इवेंट हो सकता है. उदाहरण के लिए, उपलब्ध न होने से लेकर उपलब्ध तक.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
ऑपरेशन, एक साथ नहीं किए जाते,
इसका मतलब है कि फ़ंक्शन, असल get या set ऑपरेशन पूरा होने से पहले ही रिटर्न कर सकता है.
ऑपरेशन के नतीजे (उदाहरण के लिए, getValues
के लिए प्रॉपर्टी वैल्यू और setValues
के लिए सफलता या गड़बड़ी की स्थिति), आर्ग्युमेंट के तौर पर पास किए गए कॉलबैक के ज़रिए डिलीवर किए जाते हैं.
लागू करने की प्रोसेस, अनुरोध को मैनेज करने वाली बाइंडर थ्रेड में नतीजे पर ब्लॉक नहीं होनी चाहिए. इसके बजाय, हमारा सुझाव है कि आप अनुरोध को अनुरोध सूची में सेव करें और अनुरोधों को अलग-अलग हैंडलर थ्रेड का इस्तेमाल करके, एक साथ मैनेज करें. ज़्यादा जानकारी के लिए, पहचान फ़ाइल को लागू करने की प्रोसेस देखें.
पहली इमेज. एसिंक्रोनस प्रोसेस.
बड़े पार्सल
XXXs
नाम वाले सभी स्ट्रक्चर, जैसे कि VehiclePropConfigs
,
SetValueRequests
, और VehiclePropValues
को
LargeParcelable
(या, StableLargeParcelable
) कहा जाता है. हर स्ट्रक्चर में,
वैल्यू की एक सूची होती है. इनका इस्तेमाल, बड़े डेटा को पास करने के लिए किया जाता है. यह डेटा, बाइंडर की सीमाओं (LargeParcelable
लाइब्रेरी के लागू होने पर 4 केबी) से ज़्यादा हो सकता है. हर फ़ाइल का स्ट्रक्चर एक जैसा होता है. इसमें ये फ़ील्ड होते हैं.
मार्गदर्शन | ब्यौरा |
---|---|
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 के लिए Java क्लाइंट के तौर पर, Car Service, LargeParcelable
के लिए सीरियलाइज़ेशन और डीसीरियलाइज़ेशन को मैनेज करता है. VHAL लागू करने और नेटिव क्लाइंट के लिए, LargeParcelable
को LargeParcelable
लाइब्रेरी या ParcelableUtils.h
में लाइब्रेरी के लिए काम की रैपर क्लास के साथ सीरियलाइज़ और डीसीरियलाइज़ किया जाना चाहिए.
उदाहरण के लिए, बाइंडर से मिले getValues
के लिए अनुरोधों को पार्स करने वाला नेटिव क्लाइंट, इस तरह काम करता है:
// 'requests' are from the binder.
GetValueRequests requests;
expected
बाइंडर के ज़रिए getValues
के लिए नतीजे भेजने वाला VHAL लागू करने का नमूना नीचे दिखाया गया है:
std::vector