सेंसर हार्डवेयर एब्स्ट्रक्शन लेयर (एचएएल) एंड्रॉइड सेंसर फ्रेमवर्क और डिवाइस के सेंसर, जैसे एक्सेलेरोमीटर या जायरोस्कोप के बीच का इंटरफ़ेस है। सेंसर एचएएल उन कार्यों को परिभाषित करता है जिन्हें सेंसर को नियंत्रित करने के लिए ढांचे को अनुमति देने के लिए लागू किया जाना चाहिए।
सेंसर एचएएल 2.0 नए और अपग्रेड किए गए डिवाइस के लिए एंड्रॉइड 10 और उच्चतर में उपलब्ध है। सेंसर एचएएल 2.0 सेंसर एचएएल 1.0 पर आधारित है, लेकिन इसमें कई महत्वपूर्ण अंतर हैं, जो इसे पिछड़े संगत होने से रोकते हैं। सेंसर एचएएल 2.0 एंड्रॉइड सेंसर फ्रेमवर्क में एचएएल से सेंसर इवेंट भेजने के लिए फास्ट मैसेज क्यूज (एफएमक्यू) का उपयोग करता है।
सेंसर एचएएल 2.1 नए और उन्नत उपकरणों के लिए एंड्रॉइड 11 और उच्चतर में उपलब्ध है। सेंसर एचएएल 2.1 सेंसर एचएएल 2.0 का एक पुनरावृत्ति है जो HINGE_ANGLE सेंसर प्रकार को उजागर करता है और HINGE_ANGLE
प्रकार को स्वीकार करने के लिए विभिन्न तरीकों को अपडेट करता है।
एचएएल 2.1 इंटरफ़ेस
सेंसर एचएएल 2.1 के लिए प्रलेखन का मुख्य स्रोत हार्डवेयर/इंटरफेस/सेंसर/2.1/ISensors.hal पर एचएएल परिभाषा के भीतर है। यदि इस पृष्ठ और ISensors.hal
के बीच आवश्यकताओं का विरोध है, तो ISensors.hal
में आवश्यकता का उपयोग करें।
एचएएल 2.0 इंटरफ़ेस
सेंसर एचएएल 2.0 के लिए प्रलेखन का मुख्य स्रोत हार्डवेयर/इंटरफेस/सेंसर/2.0/ISensors.hal पर एचएएल परिभाषा के भीतर है। यदि इस पृष्ठ और ISensors.hal
के बीच आवश्यकताओं का विरोध है, तो ISensors.hal
में आवश्यकता का उपयोग करें।
सेंसर एचएएल 2.0 और एचएएल 2.1 लागू करना
सेंसर HAL 2.0 या 2.1 को लागू करने के लिए, किसी ऑब्जेक्ट को ISensors
इंटरफ़ेस का विस्तार करना चाहिए और 2.0/ISensors.hal
या 2.1/ISensors.hal
में परिभाषित सभी कार्यों को लागू करना चाहिए।
HAL . की शुरुआत
सेंसर एचएएल का उपयोग करने से पहले इसे एंड्रॉइड सेंसर फ्रेमवर्क द्वारा प्रारंभ किया जाना चाहिए। फ्रेमवर्क HAL 2.0 के लिए initialize()
फ़ंक्शन को कॉल करता है और HAL 2.1 के लिए initialize_2_1()
फ़ंक्शन को सेंसर HAL को तीन पैरामीटर प्रदान करता है: दो FMQ डिस्क्रिप्टर और एक ISensorsCallback
ऑब्जेक्ट के लिए एक पॉइंटर।
HAL पहले डिस्क्रिप्टर का उपयोग इवेंट FMQ बनाने के लिए करता है जिसका उपयोग फ्रेमवर्क में सेंसर ईवेंट लिखने के लिए किया जाता है। जब एचएएल WAKE_UP
सेंसर ईवेंट के लिए अपना वेक लॉक जारी करता है, तो सिंक्रनाइज़ करने के लिए उपयोग किए जाने वाले वेक लॉक एफएमक्यू बनाने के लिए एचएएल दूसरे डिस्क्रिप्टर का उपयोग करता है। HAL को एक पॉइंटर को ISensorsCallback
ऑब्जेक्ट में सहेजना चाहिए ताकि किसी भी आवश्यक कॉलबैक फ़ंक्शन को लागू किया जा सके।
सेंसर एचएएल को इनिशियलाइज़ करते समय इनिशियलाइज़ initialize()
या initialize_2_1()
फंक्शन पहला फंक्शन होना चाहिए।
उपलब्ध सेंसर को उजागर करना
डिवाइस में उपलब्ध सभी स्थिर सेंसर की सूची प्राप्त करने के लिए, HAL 2.0 पर getSensorsList()
फ़ंक्शन का उपयोग करें और HAL 2.1 पर getSensorsList_2_1()
फ़ंक्शन का उपयोग करें। यह फ़ंक्शन सेंसर की एक सूची देता है, प्रत्येक को इसके हैंडल द्वारा विशिष्ट रूप से पहचाना जाता है। जब सेंसर एचएएल को होस्ट करने की प्रक्रिया फिर से शुरू होती है तो किसी दिए गए सेंसर के हैंडल को नहीं बदलना चाहिए। डिवाइस रीबूट में हैंडल बदल सकते हैं, और पूरे सिस्टम सर्वर पुनरारंभ हो सकते हैं।
यदि कई सेंसर समान सेंसर प्रकार और वेक-अप संपत्ति साझा करते हैं, तो सूची में पहले सेंसर को डिफ़ॉल्ट सेंसर कहा जाता है और उन ऐप्स पर वापस कर दिया जाता है जो getDefaultSensor(int sensorType, bool wakeUp)
फ़ंक्शन का उपयोग करते हैं।
सेंसर सूची की स्थिरता
एक सेंसर एचएएल पुनरारंभ होने के बाद, यदि getSensorsList()
या getSensorsList_2_1()
) द्वारा लौटाया गया डेटा पुनरारंभ करने से पहले पुनर्प्राप्त सेंसर सूची की तुलना में एक महत्वपूर्ण परिवर्तन इंगित करता है, तो फ्रेमवर्क एंड्रॉइड रनटाइम के पुनरारंभ को ट्रिगर करता है। सेंसर सूची में महत्वपूर्ण परिवर्तनों में ऐसे मामले शामिल हैं जहां किसी दिए गए हैंडल वाला सेंसर गुम है या विशेषताओं को बदल दिया है, या जहां नए सेंसर पेश किए गए हैं। हालांकि एंड्रॉइड रनटाइम को पुनरारंभ करना उपयोगकर्ता के लिए विघटनकारी है, यह आवश्यक है क्योंकि एंड्रॉइड फ्रेमवर्क अब एंड्रॉइड एपीआई अनुबंध को पूरा नहीं कर सकता है कि स्थिर (नॉनडायनामिक) सेंसर किसी ऐप के जीवनकाल के दौरान नहीं बदलते हैं। यह फ्रेमवर्क को ऐप्स द्वारा किए गए सक्रिय सेंसर अनुरोधों को पुन: स्थापित करने से भी रोक सकता है। इसलिए, एचएएल विक्रेताओं को सलाह दी जाती है कि वे परिहार्य सेंसर सूची परिवर्तनों को रोकें।
स्थिर सेंसर हैंडल सुनिश्चित करने के लिए, एचएएल को निश्चित रूप से डिवाइस में दिए गए भौतिक सेंसर को उसके हैंडल पर मैप करना चाहिए। हालांकि सेंसर एचएएल इंटरफ़ेस द्वारा कोई विशिष्ट कार्यान्वयन अनिवार्य नहीं है, डेवलपर्स के पास इस आवश्यकता को पूरा करने के लिए कई विकल्प उपलब्ध हैं।
उदाहरण के लिए, सेंसर सूची को प्रत्येक सेंसर की निश्चित विशेषताओं, जैसे विक्रेता, मॉडल और सेंसर प्रकार के संयोजन का उपयोग करके सॉर्ट किया जा सकता है। एक अन्य विकल्प इस तथ्य पर निर्भर करता है कि डिवाइस के स्थिर सेंसर का सेट हार्डवेयर में तय किया गया है, इसलिए HAL को यह जानने की जरूरत है कि सभी अपेक्षित सेंसरों ने getSensorsList()
या getSensorsList_2_1()
से लौटने से पहले इनिशियलाइज़ेशन पूरा कर लिया है। अपेक्षित सेंसर की इस सूची को एचएएल बाइनरी में संकलित किया जा सकता है या फ़ाइल सिस्टम में कॉन्फ़िगरेशन फ़ाइल में संग्रहीत किया जा सकता है, और उपस्थिति के क्रम का उपयोग स्थिर हैंडल प्राप्त करने के लिए किया जा सकता है। हालांकि सबसे अच्छा समाधान आपके एचएएल के विशिष्ट कार्यान्वयन विवरण पर निर्भर करता है, मुख्य आवश्यकता यह है कि एचएएल पुनरारंभ होने पर सेंसर हैंडल नहीं बदलते हैं।
सेंसर कॉन्फ़िगर करना
एक सेंसर सक्रिय होने से पहले, सेंसर को एक नमूना अवधि और batch()
फ़ंक्शन का उपयोग करके अधिकतम रिपोर्टिंग विलंबता के साथ कॉन्फ़िगर किया जाना चाहिए।
सेंसर डेटा के नुकसान के बिना batch()
का उपयोग करके किसी भी समय एक सेंसर को पुन: कॉन्फ़िगर करने में सक्षम होना चाहिए।
नमूना अवधि
कॉन्फ़िगर किए जा रहे सेंसर प्रकार के आधार पर नमूना अवधि का एक अलग अर्थ होता है:
- सतत: सेंसर घटनाएं निरंतर दर से उत्पन्न होती हैं।
- परिवर्तन पर: ईवेंट नमूना अवधि से अधिक तेज़ी से उत्पन्न नहीं होते हैं और यदि मापा मान नहीं बदलता है तो नमूना अवधि की तुलना में धीमी गति से उत्पन्न हो सकता है।
- एक-शॉट: नमूना अवधि की उपेक्षा की जाती है।
- विशेष: अधिक विवरण के लिए, सेंसर प्रकार देखें।
नमूना अवधि और सेंसर के रिपोर्टिंग मोड के बीच बातचीत के बारे में जानने के लिए, रिपोर्टिंग मोड देखें।
अधिकतम रिपोर्टिंग विलंबता
अधिकतम रिपोर्टिंग विलंबता नैनोसेकंड में अधिकतम समय निर्धारित करती है कि घटनाओं को विलंबित किया जा सकता है और हार्डवेयर FIFO में संग्रहीत किया जा सकता है, जबकि SoC के जागते समय HAL के माध्यम से इवेंट FMQ को लिखा जाता है।
शून्य का मान यह दर्शाता है कि घटनाओं को मापते ही रिपोर्ट किया जाना चाहिए, या तो फीफो को पूरी तरह से छोड़ देना, या जैसे ही सेंसर से एक घटना फीफो में मौजूद है, फीफो को खाली कर देना चाहिए।
उदाहरण के लिए, शून्य ट्रिगर की अधिकतम रिपोर्टिंग विलंबता के साथ 50 हर्ट्ज पर सक्रिय एक एक्सेलेरोमीटर एसओसी के जागने पर प्रति सेकंड 50 बार बाधित होता है।
जब अधिकतम रिपोर्टिंग प्रतीक्षा अवधि शून्य से अधिक होती है, तो सेंसर ईवेंट का पता लगते ही उन्हें रिपोर्ट करने की आवश्यकता नहीं होती है। ईवेंट को हार्डवेयर FIFO में अस्थायी रूप से संग्रहीत किया जा सकता है और बैचों में रिपोर्ट किया जा सकता है, जब तक कि कोई ईवेंट अधिकतम रिपोर्टिंग विलंबता से अधिक विलंबित न हो। पिछले बैच के बाद से सभी घटनाओं को रिकॉर्ड किया जाता है और एक ही बार में वापस कर दिया जाता है। यह एसओसी को भेजे गए इंटरप्ट की संख्या को कम करता है और एसओसी को कम पावर मोड में स्विच करने की इजाजत देता है जबकि सेंसर डेटा कैप्चर और बैच कर रहा है।
प्रत्येक घटना के साथ एक टाइमस्टैम्प जुड़ा होता है। जिस समय पर किसी घटना की सूचना दी जाती है, उस समय में देरी करने से ईवेंट टाइमस्टैम्प प्रभावित नहीं होना चाहिए। टाइमस्टैम्प सटीक होना चाहिए और उस समय के अनुरूप होना चाहिए जिस समय घटना भौतिक रूप से हुई थी, न कि उस समय की रिपोर्ट की गई थी।
गैर-शून्य अधिकतम रिपोर्टिंग विलंबता वाले सेंसर ईवेंट की रिपोर्टिंग पर अतिरिक्त जानकारी और आवश्यकताओं के लिए, बैचिंग देखें।
सक्रिय करने वाले सेंसर
फ्रेमवर्क activate()
फ़ंक्शन का उपयोग करके सेंसर को सक्षम और अक्षम करता है। सेंसर को सक्रिय करने से पहले, फ्रेमवर्क को पहले batch()
का उपयोग करके सेंसर को कॉन्फ़िगर करना होगा।
एक सेंसर के निष्क्रिय होने के बाद, उस सेंसर से अतिरिक्त सेंसर इवेंट्स को इवेंट FMQ में नहीं लिखा जाना चाहिए।
फ्लशिंग सेंसर
यदि सेंसर डेटा को बैच करने के लिए एक सेंसर कॉन्फ़िगर किया गया है, तो फ्रेमवर्क flush()
को कॉल करके बैच किए गए सेंसर ईवेंट के तत्काल फ्लश को बाध्य कर सकता है। यह निर्दिष्ट सेंसर हैंडल के लिए बैच किए गए सेंसर ईवेंट को ईवेंट FMQ पर तुरंत लिखे जाने का कारण बनता है। सेंसर एचएएल को flush()
पर कॉल के परिणामस्वरूप लिखे गए सेंसर ईवेंट के अंत में फ्लश पूर्ण ईवेंट जोड़ना होगा।
फ्लश अतुल्यकालिक रूप से होता है (अर्थात, यह फ़ंक्शन तुरंत वापस आना चाहिए)। यदि कार्यान्वयन कई सेंसरों के लिए एकल FIFO का उपयोग करता है, तो FIFO फ़्लश हो जाता है और फ़्लश पूर्ण ईवेंट केवल निर्दिष्ट सेंसर के लिए जोड़ा जाता है।
यदि निर्दिष्ट सेंसर में कोई FIFO नहीं है (कोई बफरिंग संभव नहीं है), या यदि कॉल के समय FIFO खाली था, तो flush()
को अभी भी सफल होना चाहिए और उस सेंसर के लिए फ्लश पूर्ण ईवेंट भेजना चाहिए। यह एक-शॉट सेंसर के अलावा अन्य सभी सेंसर पर लागू होता है।
यदि flush()
को एक-शॉट सेंसर के लिए कहा जाता है, तो flush()
को BAD_VALUE
वापस करना चाहिए और फ्लश पूर्ण ईवेंट उत्पन्न नहीं करना चाहिए।
FMQ में सेंसर ईवेंट लिखना
इवेंट एफएमक्यू का उपयोग सेंसर एचएएल द्वारा सेंसर की घटनाओं को एंड्रॉइड सेंसर फ्रेमवर्क में धकेलने के लिए किया जाता है।
इवेंट FMQ एक सिंक्रोनाइज़्ड FMQ है, जिसका अर्थ है कि FMQ में उपलब्ध स्थान से अधिक ईवेंट लिखने का कोई भी प्रयास विफल लेखन में परिणाम की अनुमति देता है। ऐसे मामले में, एचएएल को यह निर्धारित करना चाहिए कि घटनाओं के वर्तमान सेट को घटनाओं के दो छोटे समूहों के रूप में लिखना है या पर्याप्त जगह उपलब्ध होने पर सभी घटनाओं को एक साथ लिखना है।
जब सेंसर एचएएल ने इवेंट एफएमक्यू को सेंसर इवेंट की वांछित संख्या लिखी है, तो सेंसर एचएएल को फ्रेमवर्क को सूचित करना चाहिए कि इवेंट एफएमक्यू के EventFlag::wake
फंक्शन में EventQueueFlagBits::READ_AND_PROCESS
बिट लिखकर ईवेंट तैयार हैं। EventFlag को EventFlag::createEventFlag
और Event FMQ के getEventFlagWord()
फ़ंक्शन का उपयोग करके Event FMQ से बनाया जा सकता है।
सेंसर एचएएल 2.0/2.1 इवेंट FMQ पर writeBlocking
write
को सपोर्ट करता है। डिफ़ॉल्ट कार्यान्वयन write
का उपयोग करने के लिए एक संदर्भ प्रदान करता है। यदि writeBlocking
फ़ंक्शन का उपयोग किया जाता है, तो readNotification
ध्वज को EventQueueFlagBits::EVENTS_READ
पर सेट किया जाना चाहिए, जो कि फ्रेमवर्क द्वारा सेट किया जाता है जब यह ईवेंट FMQ से ईवेंट पढ़ता है। राइट नोटिफिकेशन फ्लैग को EventQueueFlagBits::READ_AND_PROCESS
पर सेट किया जाना चाहिए, जो इस फ्रेमवर्क को सूचित करता है कि इवेंट FMQ को लिखा गया है।
WAKE_UP इवेंट
WAKE_UP
ईवेंट सेंसर ईवेंट हैं जो एप्लिकेशन प्रोसेसर (AP) को जगाते हैं और ईवेंट को तुरंत हैंडल करते हैं। जब भी कोई WAKE_UP
ईवेंट इवेंट FMQ को लिखा जाता है, तो सेंसर HAL को यह सुनिश्चित करने के लिए एक वेक लॉक सुरक्षित करना चाहिए कि सिस्टम तब तक जागता रहे जब तक कि फ्रेमवर्क ईवेंट को हैंडल नहीं कर लेता। WAKE_UP
ईवेंट प्राप्त करने पर, फ्रेमवर्क अपने स्वयं के वेक लॉक को सुरक्षित करता है, जिससे सेंसर HAL को अपना वेक लॉक जारी करने की अनुमति मिलती है। जब सेंसर एचएएल अपना वेक लॉक जारी करता है, तो सिंक्रनाइज़ करने के लिए, वेक लॉक एफएमक्यू का उपयोग करें।
WAKE_UP
घटनाओं की संख्या निर्धारित करने के लिए सेंसर HAL को वेक लॉक FMQ पढ़ना चाहिए, जिसे फ्रेमवर्क ने संभाला है। HAL को केवल WAKE_UP
ईवेंट के लिए अपना वेक लॉक जारी करना चाहिए, यदि हैंडल न WAKE_UP
ईवेंट की कुल संख्या शून्य है। सेंसर घटनाओं को संभालने के बाद, फ्रेमवर्क उन घटनाओं की संख्या की गणना करता है जिन्हें WAKE_UP
घटनाओं के रूप में चिह्नित किया जाता है और इस संख्या को वेक लॉक एफएमक्यू पर वापस लिखता है।
जब भी यह वेक लॉक FMQ को डेटा लिखता है, तो फ्रेमवर्क WakeLockQueueFlagBits::DATA_WRITTEN
वेक लॉक FMQ पर सूचना लिखने की सूचना सेट करता है।
गतिशील सेंसर
डायनामिक सेंसर ऐसे सेंसर होते हैं जो भौतिक रूप से डिवाइस का हिस्सा नहीं होते हैं, लेकिन डिवाइस के इनपुट के रूप में उपयोग किए जा सकते हैं, जैसे एक्सेलेरोमीटर वाला गेमपैड।
जब एक डायनेमिक सेंसर कनेक्ट होता है, तो ISensorsCallback में onDynamicSensorConnected
फ़ंक्शन को Sensors HAL से ISensorsCallback
किया जाना चाहिए। यह नए गतिशील सेंसर के ढांचे को सूचित करता है और सेंसर को ढांचे के माध्यम से नियंत्रित करने की अनुमति देता है और सेंसर की घटनाओं को ग्राहकों द्वारा उपभोग किया जाता है।
इसी तरह, जब एक डायनेमिक सेंसर डिस्कनेक्ट हो जाता है, तो ISensorsCallback में onDynamicSensorDisconnected
फ़ंक्शन को ISensorsCallback
किया जाना चाहिए ताकि फ्रेमवर्क किसी भी सेंसर को हटा सके जो अब उपलब्ध नहीं है।
सीधा चैनल
डायरेक्ट चैनल ऑपरेशन का एक तरीका है जहां एंड्रॉइड सेंसर फ्रेमवर्क को दरकिनार करते हुए इवेंट एफएमक्यू के बजाय सेंसर इवेंट को विशिष्ट मेमोरी में लिखा जाता है। एक क्लाइंट जो एक सीधा चैनल पंजीकृत करता है, उसे सीधे उस मेमोरी से सेंसर ईवेंट को पढ़ना चाहिए जिसका उपयोग डायरेक्ट चैनल बनाने के लिए किया गया था और फ्रेमवर्क के माध्यम से सेंसर ईवेंट प्राप्त नहीं करेगा। configDirectReport()
फ़ंक्शन सामान्य ऑपरेशन के लिए batch()
के समान है और प्रत्यक्ष रिपोर्ट चैनल को कॉन्फ़िगर करता है।
RegisterDirectChannel ( registerDirectChannel()
और unregisterDirectChannel()
फ़ंक्शन एक नया प्रत्यक्ष चैनल बनाते या नष्ट करते हैं।
ऑपरेशन मोड
setOperationMode()
फ़ंक्शन फ्रेमवर्क को सेंसर को कॉन्फ़िगर करने की अनुमति देता है ताकि फ्रेमवर्क सेंसर डेटा को सेंसर में इंजेक्ट कर सके। यह परीक्षण के लिए उपयोगी है, विशेष रूप से ढांचे के नीचे मौजूद एल्गोरिदम के लिए।
HAL 2.0 में injectSensorData ( injectSensorData()
फ़ंक्शन और HAL 2.0 में injectSensorsData_2_1()
फ़ंक्शन का उपयोग आमतौर पर सेंसर HAL में परिचालन मापदंडों को पुश करने के लिए किया जाता है। फ़ंक्शन का उपयोग सेंसर की घटनाओं को एक विशिष्ट सेंसर में इंजेक्ट करने के लिए भी किया जा सकता है।
मान्यकरण
सेंसर एचएएल के अपने कार्यान्वयन को मान्य करने के लिए, सेंसर सीटीएस और वीटीएस परीक्षण चलाएं।
सीटीएस परीक्षण
सेंसर सीटीएस परीक्षण स्वचालित सीटीएस परीक्षण और मैनुअल सीटीएस सत्यापनकर्ता ऐप दोनों में मौजूद हैं।
स्वचालित परीक्षण cts/test/sensor/src/android/hardware/cts में स्थित हैं। ये परीक्षण सेंसर की मानक कार्यक्षमता को सत्यापित करते हैं, जैसे सक्रिय सेंसर, बैचिंग और सेंसर घटना दर।
CTS सत्यापनकर्ता परीक्षण cts/apps/CtsVerifier/src/com/android/cts/verifier/sensors में स्थित हैं। इन परीक्षणों के लिए परीक्षण ऑपरेटर से मैन्युअल इनपुट की आवश्यकता होती है और यह सुनिश्चित करता है कि सेंसर सटीक मानों की रिपोर्ट करें।
सीटीएस परीक्षण पास करना यह सुनिश्चित करने के लिए महत्वपूर्ण है कि परीक्षण के तहत डिवाइस सभी सीडीडी आवश्यकताओं को पूरा करता है।
वीटीएस परीक्षण
सेंसर के लिए वीटीएस परीक्षण एचएएल 2.0 हार्डवेयर/इंटरफेस/सेंसर/2.0/ वीटीएस में स्थित हैं। सेंसर के लिए वीटीएस परीक्षण एचएएल 2.1 हार्डवेयर/इंटरफेस/सेंसर/2.1/ वीटीएस में स्थित हैं। ये परीक्षण सुनिश्चित करते हैं कि सेंसर एचएएल ठीक से लागू किया गया है और ISensors.hal
और ISensorsCallback.hal
के भीतर सभी आवश्यकताओं को ठीक से पूरा किया गया है।
2.0 . से सेंसर एचएएल 2.1 में अपग्रेड करना
2.0 से सेंसर एचएएल 2.1 में अपग्रेड करते समय, आपके एचएएल कार्यान्वयन में एचएएल 2.1 प्रकारों के साथ-साथ initialize_2_1()
, getSensorsList_2_1()
, और injectSensorsData_2_1()
विधियां शामिल होनी चाहिए। इन विधियों को उपरोक्त एचएएल 2.0 के लिए उल्लिखित समान आवश्यकताओं को पूरा करना चाहिए।
चूंकि लघु संस्करण एचएएल को पिछले एचएएल के सभी कार्यों का समर्थन करना चाहिए, 2.1 एचएएल को 2.0 एचएएल के रूप में आरंभिक होने का समर्थन करना चाहिए। दोनों एचएएल संस्करणों का समर्थन करने की जटिलता से बचने के लिए, मल्टी-एचएएल 2.1 का उपयोग करने की अत्यधिक अनुशंसा की जाती है।
अपने स्वयं के सेंसर 2.1 एचएएल को कार्यान्वित करने के उदाहरण के लिए, देखें Sensors.h ।
1.0 . से सेंसर एचएएल 2.0 में अपग्रेड करना
1.0 से सेंसर एचएएल 2.0 में अपग्रेड करते समय, सुनिश्चित करें कि आपका एचएएल कार्यान्वयन निम्नलिखित आवश्यकताओं को पूरा करता है।
HAL . की शुरुआत
फ्रेमवर्क और HAL के बीच FMQs स्थापित करने के लिए initialize()
फ़ंक्शन का समर्थन किया जाना चाहिए।
उपलब्ध सेंसर को उजागर करना
सेंसर एचएएल 2.0 में, getSensorsList()
फ़ंक्शन को एक ही डिवाइस बूट के दौरान समान मान वापस करना चाहिए, यहां तक कि सेंसर एचएएल पुनरारंभ होने पर भी। getSensorsList()
फ़ंक्शन की एक नई आवश्यकता यह है कि इसे एक ही डिवाइस बूट के दौरान समान मान वापस करना होगा, यहां तक कि सेंसर एचएएल पुनरारंभ होने पर भी। यह फ्रेमवर्क को सिस्टम सर्वर के पुनरारंभ होने पर सेंसर कनेक्शन को फिर से स्थापित करने का प्रयास करने की अनुमति देता है। डिवाइस रीबूट करने के बाद getSensorsList()
द्वारा लौटाया गया मान बदल सकता है।
FMQ में सेंसर ईवेंट लिखना
poll()
को बुलाए जाने की प्रतीक्षा करने के बजाय, सेंसर्स एचएएल 2.0 में, सेंसर्स एचएएल को जब भी सेंसर इवेंट उपलब्ध होते हैं, तो उन्हें इवेंट एफएमक्यू में सेंसर इवेंट्स को सक्रिय रूप से लिखना चाहिए। HAL EventFlag
को सही बिट्स लिखने के लिए भी जिम्मेदार है, जिससे FMQ को फ्रेमवर्क के भीतर पढ़ा जा सके।
WAKE_UP इवेंट
सेंसर एचएएल 1.0 में, एचएएल WAKE_UP
को पोल () में पोस्ट किए जाने के बाद किसी भी WAKE_UP
ईवेंट के लिए poll()
poll()
बाद के किसी भी कॉल पर अपना वेक लॉक जारी करने में सक्षम था क्योंकि इससे संकेत मिलता था कि फ्रेमवर्क ने सभी सेंसर ईवेंट को संसाधित किया था और प्राप्त किया था जागो लॉक, यदि आवश्यक हो। क्योंकि, सेंसर एचएएल 2.0 में, एचएएल अब नहीं जानता है कि फ्रेमवर्क ने एफएमक्यू को लिखी गई घटनाओं को कब संसाधित किया है, वेक लॉक एफएमक्यू फ्रेमवर्क को एचएएल से संवाद करने की अनुमति देता है जब उसने WAKE_UP
घटनाओं को संभाला हो।
सेंसर एचएएल 2.0 में, सेंसर एचएएल द्वारा WAKE_UP
ईवेंट के लिए सुरक्षित वेक लॉक को SensorsHAL_WAKEUP
से शुरू होना चाहिए।
गतिशील सेंसर
सेंसर एचएएल 1.0 में poll()
फ़ंक्शन का उपयोग करके डायनामिक सेंसर लौटाए गए थे। सेंसर एचएएल 2.0 के लिए आवश्यक है कि जब भी डायनेमिक सेंसर कनेक्शन बदलते हैं तो ऑन डायनामिक सेंसर onDynamicSensorsConnected
और onDynamicSensorsDisconnected
सेंसर में ISensorsCallback
डायनामिक सेंसर डिस्कनेक्ट किए गए कॉलबैक को कॉल किया जाए। ये कॉलबैक ISensorsCallback
पॉइंटर के हिस्से के रूप में उपलब्ध हैं जो initialize()
फ़ंक्शन के माध्यम से प्रदान किया जाता है।
ऑपरेशन मोड
WAKE_UP
सेंसर के लिए DATA_INJECTION
मोड को सेंसर HAL 2.0 में समर्थित होना चाहिए।
मल्टी-एचएएल समर्थन
सेंसर एचएएल 2.0 और 2.1 सेंसर मल्टी-एचएएल ढांचे का उपयोग करके मल्टी-एचएएल का समर्थन करते हैं। कार्यान्वयन विवरण के लिए, सेंसर एचएएल 1.0 से पोर्टिंग देखें।