निलंबित मोड

SoC की पावर की स्थितियां

चिप पर सिस्टम (SoC) की पावर की स्थितियां ये हैं: चालू, निष्क्रिय, और निलंबित. “चालू” का मतलब है कि एसओसी काम कर रहा है. “Idle” एक ऐसा मोड है जिसमें SoC चालू रहता है, लेकिन कोई काम नहीं करता. “निलंबित करें” एक कम पावर मोड है, जिसमें SoC को बिजली नहीं दी जाती. आम तौर पर, इस मोड में डिवाइस की बिजली की खपत, “चालू” मोड की तुलना में 100 गुना कम होती है.

ऐसे सेंसर जो डिवाइस को चालू नहीं करते

नॉन-वेक-अप सेंसर ऐसे सेंसर होते हैं जो SoC को स्लीप मोड में जाने से नहीं रोकते और डेटा रिपोर्ट करने के लिए SoC को नहीं जगाते. खास तौर पर, ड्राइवरों को वेक-लॉक रखने की अनुमति नहीं है. अगर ऐप्लिकेशन को स्क्रीन बंद होने पर, वेक-अप न करने वाले सेंसर से इवेंट पाने हैं, तो उन्हें कुछ हद तक वेक लॉक रखना होगा. SoC के निलंबित मोड में होने पर, सेंसर को काम करते रहना चाहिए और इवेंट जनरेट करने चाहिए. इन्हें हार्डवेयर FIFO में डाला जाता है. (ज़्यादा जानकारी के लिए, एक साथ कई फ़ाइलें अपलोड करना देखें.) SoC के चालू होने पर, FIFO में मौजूद इवेंट, ऐप्लिकेशन को डिलीवर किए जाते हैं. अगर सभी इवेंट को सेव करने के लिए, FIFO का साइज़ बहुत छोटा है, तो पुराने इवेंट मिट जाते हैं. साथ ही, नए डेटा को सेव करने के लिए, सबसे पुराना डेटा हटा दिया जाता है. अगर FIFO मौजूद नहीं है, तो SoC के निलंबित मोड में जनरेट होने वाले सभी इवेंट मिट जाते हैं. हालांकि, बदलाव होने पर सूचना देने वाले हर सेंसर से मिले सबसे नए इवेंट को FIFO के बाहर सेव करना ज़रूरी है , ताकि वह मिट न जाए.

SoC के निलंबित मोड से बाहर निकलते ही, FIFO के सभी इवेंट की जानकारी दी जाती है और ऑपरेशन सामान्य तरीके से फिर से शुरू हो जाते हैं.

ऐसे ऐप्लिकेशन जो बिना वेक-अप सेंसर का इस्तेमाल करते हैं उन्हें वेक लॉक का इस्तेमाल करना चाहिए, ताकि यह पक्का किया जा सके कि सिस्टम निलंबित न हो. साथ ही, जब उन्हें सेंसर की ज़रूरत न हो, तब उन्हें सेंसर से अनरजिस्टर कर देना चाहिए. इसके अलावा, SoC के निलंबित मोड में होने पर, इवेंट मिटने की संभावना भी होती है.

वेक-अप सेंसर

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

यह पक्का करने के लिए कि SoC फिर से स्लीप मोड में जाने से पहले, ऐप्लिकेशन को इवेंट मिलने का समय मिल जाए, ड्राइवर को हर बार इवेंट की रिपोर्टिंग के दौरान 200 मिलीसेकंड के लिए "टाइम आउट वेक लॉक" रखना होगा. इसका मतलब है कि SoC को फिर से चालू होने के लिए, 200 मिलीसेकंड का समय नहीं दिया जाना चाहिए. Android के आने वाले वर्शन में यह ज़रूरी शर्त नहीं होगी. हालांकि, तब तक हमें टाइम आउट वाले वेक लॉक की ज़रूरत होगी.

वेक-अप और नॉन-वेक-अप सेंसर को कैसे तय किया जाता है?

KitKat तक, सेंसर के टाइप के हिसाब से यह तय किया जाता था कि कोई सेंसर, डिवाइस को चालू करने वाला है या नहीं: ज़्यादातर सेंसर, डिवाइस को चालू करने वाले नहीं थे. हालांकि, प्रॉक्सिमिटी सेंसर और ज़रूरी मोशन डिटेक्टर को छोड़कर.

L वर्शन से, सेंसर की परिभाषा में एक फ़्लैग से यह तय किया जाता है कि कोई सेंसर, वॉकी-अप सेंसर है या नहीं. ज़्यादातर सेंसर को एक ही सेंसर के, 'जागने' और 'जागने के लिए नहीं' वैरिएंट के जोड़े के हिसाब से तय किया जा सकता है. ऐसे में, उन्हें एक-दूसरे के साथ इंटरैक्ट किए बिना, दो अलग-अलग सेंसर के तौर पर काम करना चाहिए. ज़्यादा जानकारी के लिए, इंटरैक्शन देखें.

जब तक सेंसर टाइप की परिभाषा में कुछ और नहीं बताया गया है, तब तक हमारा सुझाव है कि सेंसर टाइप में बताए गए हर सेंसर टाइप के लिए, एक वेक-अप सेंसर और एक नॉन-वेक-अप सेंसर लागू करें. हर सेंसर टाइप की परिभाषा में, देखें कि SensorManager.getDefaultSensor(sensorType) से कौनसा सेंसर (वॉकी-अप या नॉन-वॉकी-अप) वापस आएगा. ज़्यादातर ऐप्लिकेशन इसी सेंसर का इस्तेमाल करेंगे.