VHAL इंटरफ़ेस

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 प्रॉपर्टी. प्रॉपर्टी इवेंट, सदस्यता लेने के सैंपल रेट के आधार पर होता है Hz पर या वाहन की बस की मैसेज फ़्रीक्वेंसी में. कोई प्रॉपर्टी इवेंट तब भी हो सकता है, जब किसी प्रॉपर्टी स्थिति में बदलाव होने पर. उदाहरण के लिए, उपलब्ध न होने से लेकर उपलब्ध तक.
ON_CHANGE प्रॉपर्टी के लिए, प्रॉपर्टी इवेंट तब होता है, जब किसी प्रॉपर्टी की वैल्यू होती है या किसी प्रॉपर्टी की स्थिति बदल जाती है.
SharedMemoryFileCount हमेशा 0 होता है.
oneway void onPropertySetError(in VehiclePropErrors errors) अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
एसिंक्रोनस प्रॉपर्टी सेट की ऐसी गड़बड़ियों की रिपोर्टिंग के लिए कॉलबैक करें जिनके लिए कोई मिलता-जुलता सेट न हो अनुरोध. अगर हमें पता चलता है कि गड़बड़ी किस सेट अनुरोध के लिए है, तो onSetValues इसके बजाय गड़बड़ी के नतीजे का इस्तेमाल किया जाना चाहिए.

ज़्यादा जानकारी के लिए, यह देखें IVehicle.aidl और IVehicleCallback.aidl.

वीएचएएल के लागू होने की पुष्टि, वीएचएएल वीटीएस ने VtsHalAutomotiveVehicle_TargetTest.cpp. टेस्ट से इस बात की पुष्टि की जाती है कि बुनियादी तरीकों को सही तरीके से लागू किया गया है या नहीं. साथ ही, इस बात की भी पुष्टि की जाती है कि प्रॉपर्टी को कॉन्फ़िगरेशन सही हैं.

वाहन की प्रॉपर्टी की वैल्यू

इसका इस्तेमाल करें VehiclePropValue स्ट्रक्चर करें, जिसमें हर प्रॉपर्टी की वैल्यू बताई गई हो. इसमें ये फ़ील्ड शामिल हैं:

फ़ील्ड ब्यौरा
timestamp उस समय को दिखाने वाला टाइमस्टैंप जब इवेंट हुआ था और इवेंट के साथ सिंक हुआ SystemClock.elapsedRealtimeNano() घड़ी.
prop इस वैल्यू का प्रॉपर्टी आईडी.
areaid इस वैल्यू के लिए एरिया आईडी. वह इलाका, इस क्षेत्र में इस्तेमाल की जा सकने वाली जगहों में से एक होना चाहिए आईडी कॉन्फ़िगरेशन या ग्लोबल प्रॉपर्टी के लिए 0.
value ऐसा डेटा स्ट्रक्चर जिसमें प्रॉपर्टी की असल वैल्यू होती है. प्रॉपर्टी टाइप के आधार पर, एक या इस फ़ील्ड के और फ़ील्ड का इस्तेमाल, असल वैल्यू को स्टोर करने के लिए किया जाता है. उदाहरण के लिए, पहले value.int32Values के एलिमेंट का इस्तेमाल, Int32 टाइप की प्रॉपर्टी के लिए किया जाता है. जानकारी के लिए, यह देखें प्रॉपर्टी कॉन्फ़िगरेशन.

एसिंक्रोनस getValues और setValues

getValues और setValues कार्रवाइयां एसिंक्रोनस तरीके से की जाती हैं, इसका मतलब है कि वास्तविक पाने या सेट करने की कार्रवाई पूरी होने से पहले फ़ंक्शन वापस आ सकता है. कार्रवाई के नतीजे (उदाहरण के लिए, getValues के लिए प्रॉपर्टी वैल्यू और सक्सेस या setValues के लिए गड़बड़ी का स्टेटस) को आर्ग्युमेंट के तौर पर पास किए गए कॉलबैक से, डिलीवर किया जाता है.

अनुरोध को हैंडल करने वाले बाइंडर थ्रेड के नतीजे पर, लागू करने की प्रोसेस ब्लॉक नहीं होनी चाहिए. इसके बजाय, हमारा सुझाव है कि आप अपने अनुरोध को अनुरोध की सूची में सेव करें और एक अलग हैंडलर थ्रेड का इस्तेमाल करें का इस्तेमाल, अनुरोधों को एसिंक्रोनस तरीके से मैनेज करने के लिए किया जाता है. ज़्यादा जानकारी के लिए, इनके लिए रेफ़रंस फ़ाइल लागू करना विवरण.

पहला डायग्राम. एसिंक्रोनस प्रोसेस.

पार्सल किए जा सकने वाले बड़े प्रॉडक्ट

XXXs नाम वाले सभी स्ट्रक्चर, जैसे कि VehiclePropConfigs, SetValueRequests और VehiclePropValues को कॉल किया जाता है LargeParcelable (या, StableLargeParcelable). हर एक सूची का मतलब है बाइंडर की सीमाओं को पार करने वाले बड़े डेटा को भेजने के लिए इस्तेमाल की जाने वाली वैल्यू (4 केबी LargeParcelable लाइब्रेरी को लागू करना). हर एक के लिए यह पहले से उपलब्ध है स्ट्रक्चर की परिभाषा, जिसमें ये फ़ील्ड शामिल हैं.

मार्गदर्शन ब्यौरा
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, ScopedAStatus> deserializedResults = fromStableLargeParcelable(requests);
if (deserializedResults.ok()) {
    const std::vector& getValueRequests = deserializedResults.value().getObject()->payloads;
    // Use the getValueRequests.
  } else {
    // handle error.
}

बाइंडर के ज़रिए getValues के लिए नतीजे भेजने वाला वीएचएएल लागू किया गया सैंपल नीचे दी गई जानकारी देखें:

std::vector results = getResults();
GetValueResults parcelableResults;
ScopedAStatus status = vectorToStableLargeParcelable(std::move(results), &parcelableResults);
if (status.isOk()) {
    // Send parcelableResults through callback.
} else {
    // Handle error.
}