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

चित्र 1. Android सेंसर स्टैक और उनके संबंधित स्वामियों की परतें
एसडीके
एप्लिकेशन सेंसर एसडीके (सॉफ्टवेयर डेवलपमेंट किट) एपीआई के माध्यम से सेंसर का उपयोग करते हैं। एसडीके में उपलब्ध सेंसर को सूचीबद्ध करने और सेंसर में पंजीकरण करने के लिए कार्य हैं।
सेंसर में पंजीकरण करते समय, एप्लिकेशन अपनी पसंदीदा नमूना आवृत्ति और इसकी विलंबता आवश्यकताओं को निर्दिष्ट करता है।
- उदाहरण के लिए, कोई एप्लिकेशन डिफ़ॉल्ट एक्सेलेरोमीटर में पंजीकृत हो सकता है, 100Hz पर ईवेंट का अनुरोध कर सकता है, और ईवेंट को 1-सेकंड विलंबता के साथ रिपोर्ट करने की अनुमति दे सकता है।
- एप्लिकेशन को एक्सेलेरोमीटर से कम से कम 100 हर्ट्ज की दर से ईवेंट प्राप्त होंगे, और संभवतः 1 सेकंड तक की देरी हो सकती है।
SDK के बारे में अधिक जानकारी के लिए डेवलपर दस्तावेज़ देखें।
रूपरेखा
ढांचा कई अनुप्रयोगों को एचएएल से जोड़ने का प्रभारी है। एचएएल अपने आप में सिंगल क्लाइंट है। फ्रेमवर्क स्तर पर इस मल्टीप्लेक्सिंग के बिना, किसी भी समय केवल एक ही एप्लिकेशन प्रत्येक सेंसर तक पहुंच सकता है।
- जब एक सेंसर के लिए पहला एप्लिकेशन पंजीकृत होता है, तो फ्रेमवर्क सेंसर को सक्रिय करने के लिए एचएएल को एक अनुरोध भेजता है।
- जब अतिरिक्त एप्लिकेशन एक ही सेंसर में पंजीकृत होते हैं, तो फ्रेमवर्क प्रत्येक एप्लिकेशन की आवश्यकताओं को ध्यान में रखता है और अद्यतन अनुरोधित मापदंडों को एचएएल को भेजता है।
- नमूना आवृत्ति अनुरोधित नमूना आवृत्तियों की अधिकतम होगी, जिसका अर्थ है कि कुछ अनुप्रयोगों को उनके द्वारा अनुरोधित आवृत्ति से अधिक आवृत्ति पर ईवेंट प्राप्त होंगे।
- अधिकतम रिपोर्टिंग विलंबता अनुरोधित लोगों की न्यूनतम होगी। यदि कोई एप्लिकेशन 0 की अधिकतम रिपोर्टिंग विलंबता वाले एक सेंसर का अनुरोध करता है, तो सभी एप्लिकेशन इस सेंसर से निरंतर मोड में ईवेंट प्राप्त करेंगे, भले ही कुछ ने गैर-शून्य अधिकतम रिपोर्टिंग विलंबता वाले सेंसर का अनुरोध किया हो। अधिक जानकारी के लिए बैचिंग देखें।
- जब एक सेंसर के लिए पंजीकृत अंतिम एप्लिकेशन इससे अपंजीकृत होता है, तो फ्रेमवर्क सेंसर को निष्क्रिय करने के लिए एचएएल को एक अनुरोध भेजता है ताकि बिजली की अनावश्यक खपत न हो।
बहुसंकेतन का प्रभाव
ढांचे में एक बहुसंकेतन परत की यह आवश्यकता कुछ डिज़ाइन निर्णयों की व्याख्या करती है।
- जब कोई एप्लिकेशन एक विशिष्ट नमूना आवृत्ति का अनुरोध करता है, तो इस बात की कोई गारंटी नहीं है कि ईवेंट तेज़ दर पर नहीं पहुंचेंगे। यदि किसी अन्य एप्लिकेशन ने उसी सेंसर को तेज दर से अनुरोध किया है, तो पहला एप्लिकेशन भी उन्हें तेज दर पर प्राप्त करेगा।
- गारंटी की कमी अनुरोधित अधिकतम रिपोर्टिंग विलंबता पर लागू होती है: अनुप्रयोगों को उनके अनुरोध की तुलना में बहुत कम विलंबता वाले ईवेंट प्राप्त हो सकते हैं।
- नमूना आवृत्ति और अधिकतम रिपोर्टिंग विलंबता के अलावा, एप्लिकेशन सेंसर पैरामीटर को कॉन्फ़िगर नहीं कर सकते हैं।
- उदाहरण के लिए, एक भौतिक सेंसर की कल्पना करें जो "उच्च सटीकता" और "कम शक्ति" मोड दोनों में कार्य कर सकता है।
- एंड्रॉइड डिवाइस पर उन दो मोड में से केवल एक का उपयोग किया जा सकता है, क्योंकि अन्यथा, एक एप्लिकेशन उच्च सटीकता मोड का अनुरोध कर सकता है, और दूसरा कम पावर मोड का अनुरोध कर सकता है; ढांचे के लिए दोनों अनुप्रयोगों को संतुष्ट करने का कोई तरीका नहीं होगा। ढांचा हमेशा अपने सभी ग्राहकों को संतुष्ट करने में सक्षम होना चाहिए, इसलिए यह कोई विकल्प नहीं है।
- एप्लिकेशन से सेंसर या उनके ड्राइवरों को डेटा भेजने के लिए कोई तंत्र नहीं है। यह सुनिश्चित करता है कि एक एप्लिकेशन अन्य अनुप्रयोगों को तोड़ते हुए सेंसर के व्यवहार को संशोधित नहीं कर सकता है।
सेंसर फ्यूजन
एंड्रॉइड फ्रेमवर्क कुछ समग्र सेंसर के लिए एक डिफ़ॉल्ट कार्यान्वयन प्रदान करता है। जब एक जाइरोस्कोप , एक एक्सेलेरोमीटर और एक मैग्नेटोमीटर एक डिवाइस पर मौजूद होते हैं, लेकिन कोई रोटेशन वेक्टर , गुरुत्वाकर्षण और रैखिक त्वरण सेंसर मौजूद नहीं होते हैं, तो फ्रेमवर्क उन सेंसर को लागू करता है ताकि एप्लिकेशन अभी भी उनका उपयोग कर सकें।
डिफ़ॉल्ट कार्यान्वयन के पास उन सभी डेटा तक पहुंच नहीं है जो अन्य कार्यान्वयनों तक पहुंच रखते हैं, और इसे एसओसी पर चलना चाहिए, इसलिए यह उतना सटीक नहीं है और न ही अन्य कार्यान्वयन के रूप में कुशल हो सकता है। जितना संभव हो, डिवाइस निर्माताओं को इस डिफ़ॉल्ट कार्यान्वयन पर भरोसा करने के बजाय अपने स्वयं के फ़्यूज्ड सेंसर (रोटेशन वेक्टर, गुरुत्वाकर्षण और रैखिक त्वरण, साथ ही गेम रोटेशन वेक्टर जैसे नए समग्र सेंसर) को परिभाषित करना चाहिए। डिवाइस निर्माता सेंसर चिप विक्रेताओं से भी अनुरोध कर सकते हैं कि वे उन्हें एक कार्यान्वयन प्रदान करें।
डिफ़ॉल्ट सेंसर फ़्यूज़न कार्यान्वयन को बनाए नहीं रखा जा रहा है और इस पर निर्भर उपकरणों के कारण CTS विफल हो सकता है।
हुड के नीचे
यह खंड एंड्रॉइड ओपन सोर्स प्रोजेक्ट (एओएसपी) फ्रेमवर्क कोड को बनाए रखने वालों के लिए पृष्ठभूमि की जानकारी के रूप में प्रदान किया गया है। यह हार्डवेयर निर्माताओं के लिए प्रासंगिक नहीं है।
जेएनआई
फ्रेमवर्क android.हार्डवेयर से जुड़े जावा नेटिव इंटरफेस ( जेएनआई ) का उपयोग करता है और frameworks/base/core/jni/
निर्देशिका में स्थित है। यह कोड सेंसर हार्डवेयर तक पहुंच प्राप्त करने के लिए निचले स्तर के मूल कोड को कॉल करता है।
मूल ढांचा
मूल ढांचे को frameworks/native/
में परिभाषित किया गया है और यह android.hardware पैकेज के समकक्ष मूल निवासी प्रदान करता है। मूल ढांचा सेंसर-विशिष्ट सेवाओं तक पहुंच प्राप्त करने के लिए बाइंडर आईपीसी प्रॉक्सी को कॉल करता है।
बाइंडर आईपीसी
बाइंडर आईपीसी प्रॉक्सी प्रक्रिया सीमाओं पर संचार की सुविधा प्रदान करता है।
हैल
सेंसर हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) एपीआई हार्डवेयर ड्राइवरों और एंड्रॉइड फ्रेमवर्क के बीच का इंटरफेस है। इसमें एक HAL इंटरफ़ेस sensor.h और एक HAL कार्यान्वयन शामिल है जिसे हम sensor.cpp कहते हैं।
इंटरफ़ेस Android और AOSP योगदानकर्ताओं द्वारा परिभाषित किया गया है, और कार्यान्वयन डिवाइस के निर्माता द्वारा प्रदान किया जाता है।
सेंसर एचएएल इंटरफ़ेस hardware/libhardware/include/hardware
में स्थित है। अतिरिक्त विवरण के लिए sensor.h देखें।
रिलीज चक्र
HAL कार्यान्वयन यह निर्दिष्ट करता है कि यह your_poll_device.common.version
सेट करके HAL इंटरफ़ेस के किस संस्करण को लागू करता है। मौजूदा एचएएल इंटरफ़ेस संस्करणों को sensor.h में परिभाषित किया गया है, और कार्यक्षमता उन संस्करणों से जुड़ी हुई है।
एंड्रॉइड फ्रेमवर्क वर्तमान में संस्करण 1.0 और 1.3 का समर्थन करता है, लेकिन 1.0 जल्द ही समर्थित नहीं होगा। यह दस्तावेज़ संस्करण 1.3 के व्यवहार का वर्णन करता है, जिसमें सभी उपकरणों को अपग्रेड करना चाहिए। 1.3 में अपग्रेड करने के तरीके के विवरण के लिए, HAL संस्करण बहिष्करण देखें।
कर्नेल ड्राइवर
सेंसर ड्राइवर भौतिक उपकरणों के साथ इंटरैक्ट करते हैं। कुछ मामलों में, एचएएल कार्यान्वयन और ड्राइवर एक ही सॉफ्टवेयर इकाई हैं। अन्य मामलों में, हार्डवेयर इंटीग्रेटर सेंसर चिप निर्माताओं से ड्राइवर प्रदान करने का अनुरोध करता है, लेकिन वे ही एचएएल कार्यान्वयन लिख रहे हैं।
सभी मामलों में, एचएएल कार्यान्वयन और कर्नेल ड्राइवर हार्डवेयर निर्माताओं की जिम्मेदारी है, और एंड्रॉइड उन्हें लिखने के लिए पसंदीदा दृष्टिकोण प्रदान नहीं करता है।
सेंसर हब
डिवाइस के सेंसर स्टैक में वैकल्पिक रूप से एक सेंसर हब शामिल हो सकता है, जो कम शक्ति पर कुछ निम्न-स्तरीय गणना करने के लिए उपयोगी होता है जबकि एसओसी एक निलंबित मोड में हो सकता है। उदाहरण के लिए, उन चिप्स पर स्टेप काउंटिंग या सेंसर फ्यूजन किया जा सकता है। यह सेंसर बैचिंग को लागू करने, सेंसर ईवेंट के लिए हार्डवेयर FIFO जोड़ने के लिए भी एक अच्छी जगह है। अधिक जानकारी के लिए बैचिंग देखें।
नोट: नए ContextHub सुविधाओं को विकसित करने के लिए जो नए सेंसर या LED का उपयोग करते हैं, आप Hikey या Hikey960 डेवलपमेंट बोर्ड से जुड़े Neonkey SensorHub का भी उपयोग कर सकते हैं।
सेंसर हब को कैसे अमल में लाया जाता है यह आर्किटेक्चर पर निर्भर करता है। यह कभी-कभी एक अलग चिप होता है, और कभी-कभी एसओसी के समान चिप पर शामिल होता है। सेंसर हब की महत्वपूर्ण विशेषता यह है कि इसमें बैचिंग के लिए पर्याप्त मेमोरी होनी चाहिए और कम पावर वाले एंड्रॉइड सेंसर के कार्यान्वयन को सक्षम करने के लिए बहुत कम बिजली की खपत होती है। कुछ सेंसर हब में सामान्य गणना के लिए एक माइक्रोकंट्रोलर और कम पावर सेंसर के लिए बहुत कम बिजली की गणना को सक्षम करने के लिए हार्डवेयर त्वरक होते हैं।
सेंसर हब को कैसे संरचित किया जाता है और यह सेंसर और SoC (I2C बस, SPI बस,…) के साथ कैसे संचार करता है, यह Android द्वारा निर्दिष्ट नहीं है, लेकिन इसका उद्देश्य समग्र बिजली उपयोग को कम करना है।
एक विकल्प जो कार्यान्वयन की सादगी पर महत्वपूर्ण प्रभाव डालता है, वह है सेंसर हब से एसओसी तक जाने वाली दो इंटरप्ट लाइनें: एक वेक-अप इंटरप्ट (वेक-अप सेंसर के लिए), और दूसरा नॉन-वेक-अप इंटरप्ट के लिए (नॉन-वेक-अप सेंसर के लिए)।
सेंसर
वे भौतिक एमईएम चिप्स माप कर रहे हैं। कई मामलों में, एक ही चिप पर कई भौतिक सेंसर मौजूद होते हैं। उदाहरण के लिए, कुछ चिप्स में एक्सेलेरोमीटर, जायरोस्कोप और मैग्नेटोमीटर शामिल हैं। (ऐसे चिप्स को अक्सर 9-अक्ष चिप्स कहा जाता है, क्योंकि प्रत्येक सेंसर 3 अक्षों पर डेटा प्रदान करता है।)
उनमें से कुछ चिप्स में गति का पता लगाने, चरण का पता लगाने और 9-अक्ष सेंसर संलयन जैसे सामान्य गणना करने के लिए कुछ तर्क भी होते हैं।
हालांकि सीडीडी शक्ति और सटीकता की आवश्यकताएं और सिफारिशें एंड्रॉइड सेंसर को लक्षित करती हैं न कि भौतिक सेंसर को, वे आवश्यकताएं भौतिक सेंसर की पसंद को प्रभावित करती हैं। उदाहरण के लिए, गेम रोटेशन वेक्टर पर सटीकता की आवश्यकता का भौतिक जाइरोस्कोप के लिए आवश्यक सटीकता पर प्रभाव पड़ता है। भौतिक सेंसर के लिए आवश्यकताओं को प्राप्त करने के लिए यह डिवाइस निर्माता पर निर्भर है।