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