vehicle_hw_device स्ट्रक्चर का रेफ़रंस
#include <
vehicle.h
>
डेटा फ़ील्ड |
|
struct hw_device_t | सामान्य |
int(* | init )(struct vehicle_hw_device *device, vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn) |
int(* | release )(struct vehicle_hw_device *device) |
vehicle_prop_config_t const *(* | list_properties )(struct vehicle_hw_device *device, int *num_properties) |
int(* | get )(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
void(* | release_memory_from_get )(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
int(* | set )(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
int(* | subscribe )(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
int(* | unsubscribe )(struct vehicle_hw_device *device, int32_t prop) |
int(* | dump )(struct vehicle_hw_device *device, int fd) |
पूरी जानकारी
फ़ील्ड का दस्तावेज़
struct hw_device_t common |
int(* dump)(struct vehicle_hw_device *device, int fd) |
वाहन के HAL के लिए, डीबग करने की स्थिति को प्रिंट करें. वाहन नेटवर्क सेवा इसे कॉल करेगी और इसे सेवा के डंप में शामिल किया जाएगा.
पास किए गए फ़ाइल डिस्क्रिप्टर का इस्तेमाल, dprintf() या write() का इस्तेमाल करके डीबगिंग टेक्स्ट लिखने के लिए किया जा सकता है. टेक्स्ट सिर्फ़ ASCII एन्कोडिंग में होना चाहिए.
परफ़ॉर्मेंस से जुड़ी ज़रूरी शर्तें:
यह कॉल, ब्लॉकिंग कॉल नहीं होना चाहिए. एचएएल को इस कॉल से 10 मिलीसेकंड में वापस आना चाहिए. इस कॉल में डेडलॉक से बचना ज़रूरी है, क्योंकि इसे ऑपरेशन के किसी भी समय कॉल किया जा सकता है. इस्तेमाल किए गए सिंक्रोनाइज़ेशन प्राइमिटिव (जैसे, म्यूटेक्स लॉक या सिग्नल) को टाइम आउट के साथ हासिल किया जाना चाहिए.
int(* get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
वाहन की प्रॉपर्टी की वैल्यू तुरंत पाएं. डेटा को सही तरीके से बांटा जाना चाहिए. एपीआई को कॉल करने वाले के पास डेटा फ़ील्ड का मालिकाना हक होता है. कॉलर, ज़ोन वाली प्रॉपर्टी के लिए data->prop, data->value_type, और वैकल्पिक रूप से ज़ोन की वैल्यू सेट करेगा. हालांकि, एचएएल लागू करने के लिए, सामान लौटाते समय सभी एंट्री सही तरीके से भरनी होंगी. पॉइंटर टाइप के लिए, एचएएल लागू करने के लिए ज़रूरी मेमोरी को ऐलोकेट करना चाहिए. साथ ही, कॉलर को release_memory_from_get को कॉल करने की ज़िम्मेदारी होती है. इससे एचएएल, ऐलोकेट की गई मेमोरी को रिलीज़ कर सकता है. VEHICLE_PROP_CHANGE_MODE_STATIC टाइप की प्रॉपर्टी के लिए, get फ़ंक्शन हमेशा एक ही वैल्यू दिखाना चाहिए. VEHICLE_PROP_CHANGE_MODE_ON_CHANGE टाइप की प्रॉपर्टी के लिए, यह नई वैल्यू दिखानी चाहिए. अगर अब तक कोई डेटा उपलब्ध नहीं है, जो शुरुआती चरण के दौरान हो सकता है, तो यह कॉल -EAGAIN गड़बड़ी कोड के साथ तुरंत वापस आ जाना चाहिए.
int(* init)(struct vehicle_hw_device *device, vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn) |
vehicle_prop_config_t const*(* list_properties)(struct vehicle_hw_device *device, int *num_properties) |
सभी उपलब्ध प्रॉपर्टी की सूची बनाएं. सूची, "list" में दिखती है.
- पैरामीटर
-
num_properties दिखाए गए कलेक्शन में मौजूद प्रॉपर्टी की संख्या.
- रिटर्न
- इस कार में काम करने वाले प्रॉपर्टी कॉन्फ़िगरेशन का कलेक्शन. ध्यान दें कि दिखाया गया डेटा कॉन्स्टेंट होता है और कॉलर उसमें बदलाव नहीं कर सकता. एचएएल लागू करने के दौरान, इस मेमोरी को तब तक सेव रखना चाहिए, जब तक एचएएल रिलीज़ नहीं हो जाता. इससे, इसे फिर से कॉपी करने से बचा जा सकता है.
int(* release)(struct vehicle_hw_device *device) |
close को कॉल करने से पहले, उपयोगकर्ता को रजिस्टर किए गए कॉलबैक फ़ंक्शन को मिटा देना चाहिए. अगर release() से पहले, सभी प्रॉपर्टी पर unsubscribe() कॉल नहीं किया जाता है, तो release() , प्रॉपर्टी की सदस्यता अपने-आप रद्द कर देगा.
void(* release_memory_from_get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
पिछले get कॉल में डेटा के लिए जो मेमोरी असाइन की गई थी उसे रिलीज़ करें. बाइट या स्ट्रिंग के लिए get कॉल में, वाहन के HAL से ज़रूरी मेमोरी असाइन करना शामिल है. सुरक्षित रहने के लिए, वाहन के एचएएल (HAL) से एलोकेट की गई मेमोरी को वाहन के एचएएल (HAL) से रिलीज़ किया जाना चाहिए. वाहन की नेटवर्क सेवा, वाहन के एचएएल (HAL) से डेटा की ज़रूरत न होने पर इसे कॉल करेगी. वाहन के एचएएल (HAL) को सिर्फ़ vehicle_prop_value_t के सदस्य को रिलीज़ करना चाहिए, जैसे कि data->str_value.data या data->bytes_value.data, लेकिन डेटा को नहीं, क्योंकि डेटा को वाहन की नेटवर्क सेवा से एलोकेट किया जाता है. मेमोरी खाली होने के बाद, वाहन के एचएएल से जुड़े पॉइंटर को NULL पर सेट किया जाना चाहिए.
int(* set)(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
वाहन की प्रॉपर्टी की वैल्यू सेट करें. डेटा को सही तरीके से असाइन किया जाना चाहिए और यह NULL नहीं होना चाहिए. एपीआई को कॉल करने वाले के पास डेटा फ़ील्ड का मालिकाना हक होता है. सेट ऑपरेशन के लिए, डेटा के टाइमस्टैंप को अनदेखा कर दिया जाएगा. कुछ प्रॉपर्टी सेट करने के लिए, शुरुआती स्थिति उपलब्ध होना ज़रूरी है. वाहन के एचएएल के आधार पर, ऐसा हो सकता है कि शुरू करने के बाद कुछ समय के लिए यह शुरुआती डेटा उपलब्ध न हो. ऐसे में, get call की तरह ही set call भी -EAGAIN दिखा सकता है. अलग से पावर कंट्रोल वाली प्रॉपर्टी के लिए, अगर प्रॉपर्टी चालू नहीं है, तो सेट करने की प्रोसेस पूरी नहीं हो सकती. ऐसे मामले में, hal को -ESHUTDOWN गड़बड़ी का मैसेज दिखाना चाहिए.
int(* subscribe)(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
इवेंट की सदस्यता लेना. list_properties के आउटपुट के आधार पर, अगर प्रॉपर्टी: a) बदलाव होने पर: sample_rate को 0 पर सेट किया जाना चाहिए. b) फ़्रीक्वेंसी के साथ काम करती है: sample_rate को min_sample_rate से max_sample_rate पर सेट किया जाना चाहिए. बदलाव होने पर सूचना देने वाली प्रॉपर्टी के लिए, वाहन नेटवर्क सेवा शुरुआती स्थिति की जांच करने के लिए, एक और get कॉल करेगी. इस वजह से, वाहन के एचएएल लागू करने के लिए, बदलाव होने पर सूचना देने वाली प्रॉपर्टी के लिए शुरुआती स्थिति भेजने की ज़रूरत नहीं होती.
- पैरामीटर
-
डिवाइस प्रॉप sample_rate ज़ोन ज़ोन वाली प्रॉपर्टी के लिए, सदस्यता वाले सभी ज़ोन. ज़ोन वाली प्रॉपर्टी के लिए, इन्हें अनदेखा किया जा सकता है. 0 का मतलब है कि सभी ज़ोन के लिए इस्तेमाल किया जा सकता है, न कि कोई ज़ोन नहीं.
int(* unsubscribe)(struct vehicle_hw_device *device, int32_t prop) |
इस स्ट्रक्चर का दस्तावेज़, इस फ़ाइल से जनरेट किया गया था:
- hardware/libhardware/include/hardware/ vehicle.h