सेंसर स्टैक

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

एंड्रॉइड सेंसर स्टैक की परतें और मालिक

चित्र 1. एंड्रॉइड सेंसर स्टैक की परतें और उनके संबंधित स्वामी

एसडीके

एप्लिकेशन सेंसर एसडीके (सॉफ्टवेयर डेवलपमेंट किट) एपीआई के माध्यम से सेंसर तक पहुंचते हैं। एसडीके में उपलब्ध सेंसरों को सूचीबद्ध करने और सेंसर में पंजीकरण करने के कार्य शामिल हैं।

सेंसर में पंजीकरण करते समय, एप्लिकेशन इसकी पसंदीदा नमूना आवृत्ति और इसकी विलंबता आवश्यकताओं को निर्दिष्ट करता है।

  • उदाहरण के लिए, एक एप्लिकेशन डिफ़ॉल्ट एक्सेलेरोमीटर पर पंजीकृत हो सकता है, 100 हर्ट्ज पर घटनाओं का अनुरोध कर सकता है, और 1-सेकंड विलंबता के साथ घटनाओं को रिपोर्ट करने की अनुमति दे सकता है।
  • एप्लिकेशन को एक्सेलेरोमीटर से कम से कम 100 हर्ट्ज की दर से इवेंट प्राप्त होंगे, और संभवतः 1 सेकंड तक की देरी होगी।

एसडीके पर अधिक जानकारी के लिए डेवलपर दस्तावेज़ देखें।

रूपरेखा

फ्रेमवर्क कई अनुप्रयोगों को एचएएल से जोड़ने का प्रभारी है। एचएएल स्वयं एकल-ग्राहक है। फ्रेमवर्क स्तर पर इस मल्टीप्लेक्सिंग के बिना, केवल एक ही एप्लिकेशन किसी भी समय प्रत्येक सेंसर तक पहुंच सकता है।

  • जब पहला एप्लिकेशन सेंसर के लिए पंजीकृत होता है, तो फ्रेमवर्क सेंसर को सक्रिय करने के लिए एचएएल को एक अनुरोध भेजता है।
  • जब अतिरिक्त एप्लिकेशन एक ही सेंसर पर पंजीकृत होते हैं, तो फ्रेमवर्क प्रत्येक एप्लिकेशन की आवश्यकताओं को ध्यान में रखता है और अद्यतन अनुरोधित पैरामीटर एचएएल को भेजता है।
    • नमूनाकरण आवृत्ति अनुरोधित नमूनाकरण आवृत्तियों की अधिकतम होगी, जिसका अर्थ है कि कुछ अनुप्रयोगों को उनके द्वारा अनुरोधित आवृत्ति से अधिक आवृत्ति पर ईवेंट प्राप्त होंगे।
    • अधिकतम रिपोर्टिंग विलंबता अनुरोधित विलंबता में से न्यूनतम होगी। यदि कोई एप्लिकेशन 0 की अधिकतम रिपोर्टिंग विलंबता के साथ एक सेंसर का अनुरोध करता है, तो सभी एप्लिकेशन इस सेंसर से निरंतर मोड में ईवेंट प्राप्त करेंगे, भले ही कुछ ने गैर-शून्य अधिकतम रिपोर्टिंग विलंबता वाले सेंसर का अनुरोध किया हो। अधिक विवरण के लिए बैचिंग देखें.
  • जब एक सेंसर के लिए पंजीकृत अंतिम एप्लिकेशन इससे अपंजीकृत हो जाता है, तो फ्रेमवर्क सेंसर को निष्क्रिय करने के लिए एचएएल को एक अनुरोध भेजता है ताकि अनावश्यक रूप से बिजली की खपत न हो।

मल्टीप्लेक्सिंग का प्रभाव

फ्रेमवर्क में मल्टीप्लेक्सिंग परत की यह आवश्यकता कुछ डिज़ाइन निर्णयों की व्याख्या करती है।

  • जब कोई एप्लिकेशन किसी विशिष्ट नमूनाकरण आवृत्ति का अनुरोध करता है, तो इस बात की कोई गारंटी नहीं है कि ईवेंट तेज़ गति से नहीं आएंगे। यदि किसी अन्य एप्लिकेशन ने उसी सेंसर को तेज़ दर से अनुरोध किया है, तो पहला एप्लिकेशन भी उन्हें तेज़ दर पर प्राप्त करेगा।
  • गारंटी की वही कमी अनुरोधित अधिकतम रिपोर्टिंग विलंबता पर लागू होती है: अनुप्रयोगों को उनके अनुरोध की तुलना में बहुत कम विलंबता के साथ ईवेंट प्राप्त हो सकते हैं।
  • नमूनाकरण आवृत्ति और अधिकतम रिपोर्टिंग विलंबता के अलावा, एप्लिकेशन सेंसर मापदंडों को कॉन्फ़िगर नहीं कर सकते हैं।
    • उदाहरण के लिए, एक भौतिक सेंसर की कल्पना करें जो "उच्च सटीकता" और "कम पावर" दोनों मोड में कार्य कर सकता है।
    • एंड्रॉइड डिवाइस पर उन दो मोड में से केवल एक का उपयोग किया जा सकता है, क्योंकि अन्यथा, एक एप्लिकेशन उच्च सटीकता मोड का अनुरोध कर सकता है, और दूसरा कम पावर मोड का अनुरोध कर सकता है; दोनों अनुप्रयोगों को संतुष्ट करने के लिए ढांचे के पास कोई रास्ता नहीं होगा। फ़्रेमवर्क को हमेशा अपने सभी ग्राहकों को संतुष्ट करने में सक्षम होना चाहिए, इसलिए यह कोई विकल्प नहीं है।
  • एप्लिकेशन से सेंसर या उनके ड्राइवरों तक डेटा भेजने की कोई व्यवस्था नहीं है। यह सुनिश्चित करता है कि एक एप्लिकेशन अन्य एप्लिकेशन को तोड़ते हुए सेंसर के व्यवहार को संशोधित नहीं कर सकता है।

सेंसर संलयन

एंड्रॉइड फ्रेमवर्क कुछ समग्र सेंसर के लिए एक डिफ़ॉल्ट कार्यान्वयन प्रदान करता है। जब किसी डिवाइस पर जाइरोस्कोप , एक्सेलेरोमीटर और मैग्नेटोमीटर मौजूद होते हैं, लेकिन कोई रोटेशन वेक्टर , गुरुत्वाकर्षण और रैखिक त्वरण सेंसर मौजूद नहीं होते हैं, तो फ्रेमवर्क उन सेंसर को लागू करता है ताकि एप्लिकेशन अभी भी उनका उपयोग कर सकें।

डिफ़ॉल्ट कार्यान्वयन में उन सभी डेटा तक पहुंच नहीं होती है जिन तक अन्य कार्यान्वयनों की पहुंच होती है, और इसे SoC पर चलना चाहिए, इसलिए यह उतना सटीक नहीं है और न ही उतना कुशल है जितना अन्य कार्यान्वयन हो सकते हैं। जितना संभव हो, डिवाइस निर्माताओं को इस डिफ़ॉल्ट कार्यान्वयन पर भरोसा करने के बजाय अपने स्वयं के फ़्यूज्ड सेंसर (रोटेशन वेक्टर, गुरुत्वाकर्षण और रैखिक त्वरण, साथ ही गेम रोटेशन वेक्टर जैसे नए मिश्रित सेंसर) को परिभाषित करना चाहिए। डिवाइस निर्माता सेंसर चिप विक्रेताओं से कार्यान्वयन प्रदान करने का भी अनुरोध कर सकते हैं।

डिफ़ॉल्ट सेंसर फ़्यूज़न कार्यान्वयन को बनाए नहीं रखा जा रहा है और इससे इस पर निर्भर डिवाइस सीटीएस विफल हो सकते हैं।

हुड के नीचे

यह अनुभाग एंड्रॉइड ओपन सोर्स प्रोजेक्ट (एओएसपी) फ्रेमवर्क कोड को बनाए रखने वालों के लिए पृष्ठभूमि जानकारी के रूप में प्रदान किया गया है। यह हार्डवेयर निर्माताओं के लिए प्रासंगिक नहीं है.

जेएनआई

फ्रेमवर्क एंड्रॉइड.हार्डवेयर से जुड़े जावा नेटिव इंटरफेस (जेएनआई) का उपयोग करता है और frameworks/base/core/jni/ निर्देशिका में स्थित है। यह कोड सेंसर हार्डवेयर तक पहुंच प्राप्त करने के लिए निचले स्तर के मूल कोड को कॉल करता है।

मूल ढाँचा

नेटिव फ्रेमवर्क को frameworks/native/ में परिभाषित किया गया है और यह android.hardware पैकेज के बराबर नेटिव प्रदान करता है। मूल ढांचा सेंसर-विशिष्ट सेवाओं तक पहुंच प्राप्त करने के लिए बाइंडर आईपीसी प्रॉक्सी को कॉल करता है।

बाइंडर आईपीसी

बाइंडर आईपीसी प्रॉक्सी प्रक्रिया सीमाओं पर संचार की सुविधा प्रदान करती है।

एचएएल

सेंसर्स हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) एपीआई हार्डवेयर ड्राइवरों और एंड्रॉइड फ्रेमवर्क के बीच का इंटरफ़ेस है। इसमें एक एचएएल इंटरफ़ेस सेंसर.एच और एक एचएएल कार्यान्वयन शामिल है जिसे हम सेंसर्स.सीपीपी के रूप में संदर्भित करते हैं।

इंटरफ़ेस को एंड्रॉइड और एओएसपी योगदानकर्ताओं द्वारा परिभाषित किया गया है, और कार्यान्वयन डिवाइस के निर्माता द्वारा प्रदान किया गया है।

सेंसर एचएएल इंटरफ़ेस hardware/libhardware/include/hardware में स्थित है। अतिरिक्त विवरण के लिए Sensors.h देखें।

रिहाई चक्र

HAL कार्यान्वयन your_poll_device.common.version सेट करके निर्दिष्ट करता है कि वह HAL इंटरफ़ेस के किस संस्करण को लागू करता है। मौजूदा एचएएल इंटरफ़ेस संस्करण सेंसर.एच में परिभाषित हैं, और कार्यक्षमता उन संस्करणों से जुड़ी हुई है।

एंड्रॉइड फ्रेमवर्क वर्तमान में संस्करण 1.0 और 1.3 का समर्थन करता है, लेकिन जल्द ही 1.0 अब समर्थित नहीं होगा। यह दस्तावेज़ संस्करण 1.3 के व्यवहार का वर्णन करता है, जिसमें सभी उपकरणों को अपग्रेड किया जाना चाहिए। 1.3 में अपग्रेड करने के तरीके के विवरण के लिए, एचएएल संस्करण अप्रचलन देखें।

कर्नेल ड्राइवर

सेंसर ड्राइवर भौतिक उपकरणों के साथ इंटरैक्ट करते हैं। कुछ मामलों में, एचएएल कार्यान्वयन और ड्राइवर एक ही सॉफ्टवेयर इकाई हैं। अन्य मामलों में, हार्डवेयर इंटीग्रेटर सेंसर चिप निर्माताओं से ड्राइवर प्रदान करने का अनुरोध करता है, लेकिन वे ही एचएएल कार्यान्वयन लिखते हैं।

सभी मामलों में, एचएएल कार्यान्वयन और कर्नेल ड्राइवर हार्डवेयर निर्माताओं की जिम्मेदारी हैं, और एंड्रॉइड उन्हें लिखने के लिए पसंदीदा दृष्टिकोण प्रदान नहीं करता है।

सेंसर हब

डिवाइस के सेंसर स्टैक में वैकल्पिक रूप से एक सेंसर हब शामिल हो सकता है, जो कम शक्ति पर कुछ निम्न-स्तरीय गणना करने के लिए उपयोगी है, जबकि SoC सस्पेंड मोड में हो सकता है। उदाहरण के लिए, उन चिप्स पर स्टेप काउंटिंग या सेंसर फ़्यूज़न किया जा सकता है। यह सेंसर बैचिंग को लागू करने, सेंसर घटनाओं के लिए हार्डवेयर एफआईएफओ जोड़ने के लिए भी एक अच्छी जगह है। अधिक जानकारी के लिए बैचिंग देखें.

नोट: नए सेंसर या एलईडी का उपयोग करने वाली नई कॉन्टेक्स्टहब सुविधाओं को विकसित करने के लिए, आप Hikey या Hikey960 डेवलपमेंट बोर्ड से जुड़े नियॉनकी SensorHub का भी उपयोग कर सकते हैं।

सेंसर हब को कैसे मूर्त रूप दिया जाता है यह वास्तुकला पर निर्भर करता है। यह कभी-कभी एक अलग चिप होती है, और कभी-कभी SoC के समान चिप में शामिल होती है। सेंसर हब की महत्वपूर्ण विशेषता यह है कि इसमें बैचिंग के लिए पर्याप्त मेमोरी होनी चाहिए और कम पावर वाले एंड्रॉइड सेंसर के कार्यान्वयन को सक्षम करने के लिए बहुत कम बिजली की खपत करनी चाहिए। कुछ सेंसर हब में सामान्य गणना के लिए एक माइक्रोकंट्रोलर और कम पावर सेंसर के लिए बहुत कम पावर गणना को सक्षम करने के लिए हार्डवेयर एक्सेलेरेटर होते हैं।

सेंसर हब की संरचना कैसे की जाती है और यह सेंसर और SoC (I2C बस, SPI बस,…) के साथ कैसे संचार करता है, यह एंड्रॉइड द्वारा निर्दिष्ट नहीं है, लेकिन इसका लक्ष्य समग्र बिजली उपयोग को कम करना होना चाहिए।

एक विकल्प जो कार्यान्वयन की सरलता पर महत्वपूर्ण प्रभाव डालता है, वह है सेंसर हब से एसओसी तक जाने वाली दो इंटरप्ट लाइनें: एक वेक-अप इंटरप्ट के लिए (वेक-अप सेंसर के लिए), और दूसरा नॉन-वेक-अप इंटरप्ट के लिए। (नॉन-वेक-अप सेंसर के लिए)।

सेंसर

वे भौतिक एमईएम चिप्स हैं जो माप लेते हैं। कई मामलों में, एक ही चिप पर कई भौतिक सेंसर मौजूद होते हैं। उदाहरण के लिए, कुछ चिप्स में एक्सेलेरोमीटर, जायरोस्कोप और मैग्नेटोमीटर शामिल हैं। (ऐसे चिप्स को अक्सर 9-अक्ष चिप्स कहा जाता है, क्योंकि प्रत्येक सेंसर 3 अक्षों पर डेटा प्रदान करता है।)

उनमें से कुछ चिप्स में सामान्य गणना करने के लिए कुछ तर्क भी होते हैं जैसे गति का पता लगाना, चरण का पता लगाना और 9-अक्ष सेंसर फ़्यूज़न।

हालाँकि सीडीडी शक्ति और सटीकता की आवश्यकताएं और सिफारिशें एंड्रॉइड सेंसर को लक्षित करती हैं, न कि भौतिक सेंसर को, लेकिन ये आवश्यकताएं भौतिक सेंसर की पसंद को प्रभावित करती हैं। उदाहरण के लिए, गेम रोटेशन वेक्टर पर सटीकता की आवश्यकता का भौतिक जाइरोस्कोप के लिए आवश्यक सटीकता पर प्रभाव पड़ता है। भौतिक सेंसर के लिए आवश्यकताओं को प्राप्त करना डिवाइस निर्माता पर निर्भर है।