एंड्रॉइड के एल रिलीज़ में, हम कुछ सेंसर एचएएल संस्करणों के लिए समर्थन रोक रहे हैं। एकमात्र समर्थित संस्करण SENSORS_DEVICE_API_VERSION_1_0
और SENSORS_DEVICE_API_VERSION_1_3
हैं।
अगली रिलीज़ में, हम 1_0 के लिए भी समर्थन बंद कर सकते हैं।
1_0 में बैचिंग की कोई अवधारणा नहीं है। यदि संभव हो, तो 1_0 का उपयोग करने वाले सभी उपकरणों को 1_3 में अपग्रेड किया जाना चाहिए।
1_1 और 1_2 बैचिंग अवधारणा की खराब परिभाषा से ग्रस्त हैं, और अब समर्थित नहीं हैं
वर्तमान में 1_1 या 1_2 का उपयोग करने वाले सभी उपकरणों को 1_3 में अपग्रेड करना होगा।
1_3 में, हमने बैचिंग की धारणा को सरल बनाया, और हमने वेक अप सेंसर पेश किए।
1_3 में अपग्रेड करने के लिए, नीचे सूचीबद्ध परिवर्तनों का पालन करें।
बैच फ़ंक्शन लागू करें
भले ही आप बैचिंग लागू नहीं करते हैं (आपके हार्डवेयर में कोई फीफो नहीं है), आपको batch
फ़ंक्शन लागू करना होगा। batch
का उपयोग किसी दिए गए सेंसर के लिए नमूना अवधि और अधिकतम रिपोर्टिंग विलंबता निर्धारित करने के लिए किया जाता है। यह setDelay
प्रतिस्थापित करता है। setDelay
अब नहीं बुलाया जाएगा।
यदि आप बैचिंग लागू नहीं करते हैं, तो आप दिए गए sampling_period_ns
पैरामीटर के साथ अपने मौजूदा setDelay
फ़ंक्शन को कॉल करके batch
लागू कर सकते हैं।
फ्लश फ़ंक्शन लागू करें
भले ही आप बैचिंग लागू नहीं करते हैं, फिर भी आपको flush
फ़ंक्शन लागू करना होगा।
यदि आप बैचिंग लागू नहीं करते हैं, flush
एक META_DATA_FLUSH_COMPLETE
ईवेंट उत्पन्न करना होगा और 0 (सफलता) लौटाना होगा।
अपना Sensors_poll_device_t.common.version बदलें
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
अपने सेंसर की परिभाषा में नए फ़ील्ड जोड़ें
प्रत्येक सेंसर को परिभाषित करते समय, सामान्य सेंसर_टी फ़ील्ड के अलावा:
.name = "My magnetic field Sensor", .vendor = "My company", .version = 1, .handle = mag_handle, .type = SENSOR_TYPE_MAGNETIC_FIELD, .maxRange = 200.0f, .resolution = CONVERT_M, .power = 5.0f, .minDelay = 16667,
आपको 1_0 और 1_3 के बीच परिभाषित नए फ़ील्ड भी सेट करने होंगे:
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount : यदि बैचिंग लागू नहीं हो रही है, तो इसे 0 पर सेट करें।
fifoMaxEventCount : यदि बैचिंग लागू नहीं हो रही है, तो इसे 0 पर सेट करें
स्ट्रिंग टाइप : सभी आधिकारिक एंड्रॉइड सेंसर (जो सेंसर.एच में परिभाषित हैं) के लिए 0 पर सेट करें, क्योंकि यह मान फ्रेमवर्क द्वारा अधिलेखित कर दिया जाएगा। गैर-आधिकारिक सेंसर के लिए, इसे सेट करने के तरीके के विवरण के लिए Sensor_t देखें।
आवश्यक अनुमति : यह वह अनुमति है जो एप्लिकेशन को आपके सेंसर तक पहुंच प्राप्त करने के लिए आवश्यक होगी। आप आमतौर पर अपने सभी सेंसर के लिए इसे 0 पर सेट कर सकते हैं, लेकिन HEART_RATE
प्रकार वाले सेंसर को इसे SENSOR_PERMISSION_BODY_SENSORS.
अधिकतम विलंब : यह मान महत्वपूर्ण है और आपको इसे सेंसर और उसके ड्राइवर की क्षमताओं के अनुसार सेट करने की आवश्यकता होगी।
यह मान केवल निरंतर और ऑन-चेंज सेंसर के लिए परिभाषित किया गया है। यह सबसे कम आवृत्ति के अनुरूप दो सेंसर घटनाओं के बीच की देरी है जिसे यह सेंसर समर्थन करता है। जब batch
फ़ंक्शन के माध्यम से कम आवृत्तियों का अनुरोध किया जाता है, तो इसके बजाय इस आवृत्ति पर ईवेंट उत्पन्न होंगे। इसका उपयोग फ्रेमवर्क या एप्लिकेशन द्वारा यह अनुमान लगाने के लिए किया जा सकता है कि बैच FIFO कब भरा हो सकता है। यदि यह मान ठीक से सेट नहीं किया गया है, तो सीटीएस विफल हो जाएगा। वन-शॉट और विशेष रिपोर्टिंग मोड सेंसर के लिए, maxDelay
को 0 पर सेट करें।
निरंतर सेंसर के लिए, इसे माइक्रोसेकंड में अनुमत अधिकतम नमूना अवधि पर सेट करें।
निम्नलिखित period_ns
, maxDelay
, और minDelay
के लिए लागू हैं:
-
period_ns
नैनोसेकंड में है जबकिmaxDelay
/minDelay
माइक्रोसेकंड में है। -
maxDelay
को हमेशा 32-बिट हस्ताक्षरित पूर्णांक के भीतर फिट होना चाहिए। इसे केवल बाइनरी अनुकूलता कारणों से 64-बिट आर्किटेक्चर पर 64-बिट घोषित किया गया है।
झंडे : यह फ़ील्ड सेंसर के रिपोर्टिंग मोड को परिभाषित करता है और सेंसर एक वेक-अप सेंसर है या नहीं।
यदि आप बैचिंग लागू नहीं करते हैं, और केवल 1.0 से 1.3 की ओर बढ़ रहे हैं, तो इसे यहां सेट करें:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
एक-शॉट सेंसर के लिए SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
निरंतर सेंसर के लिए SENSOR_FLAG_CONTINUOUS_MODE
, ऑन-चेंज सेंसर के लिए SENSOR_FLAG_ON_CHANGE_MODE
, झुकाव डिटेक्टर को छोड़कर विशेष रिपोर्टिंग मोड वाले सेंसर के लिए निकटता SENSOR_FLAG_SPECIAL_REPORTING_MODE
को छोड़कर।
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
निकटता सेंसर और एंड्रॉइड आधिकारिक झुकाव डिटेक्टर सेंसर के लिए SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
।
1_1 या 1_2 से अपग्रेड करते समय नोट्स
-
batch
फ़ंक्शन अब लगभग हमेशा सफल होता है, यहां तक कि उन सेंसर के लिए भी जो बैचिंग का समर्थन नहीं करते हैं, टाइमआउट तर्क के मूल्य से स्वतंत्र। एकमात्र मामले जहांbatch
फ़ंक्शन विफल हो सकता है वे आंतरिक त्रुटियां, या खराबsensor_handle,
या नकारात्मकsampling_period_ns
या नकारात्मकmax_report_latency_ns
हैं। - कोई सेंसर बैचिंग का समर्थन करता है या नहीं, यह इस बात से परिभाषित होता है कि उसका
fifoMaxEventCount
0 से अधिक है या नहीं। (पिछले संस्करणों में, यहbatch()
के रिटर्न मान पर आधारित था।) - बैचिंग का समर्थन करने वाले सेंसर हमेशा उस स्थिति में होते हैं जिसे हम पिछले संस्करणों में "बैच मोड" कहते थे: भले ही
max_report_latency_ns
पैरामीटर 0 हो, सेंसर को अभी भी बैच किया जाना चाहिए, जिसका अर्थ है कि जब SoC सस्पेंड मोड में जाता है तो घटनाओं को FIFO में संग्रहीत किया जाना चाहिए . -
batch
फ़ंक्शन केflags
पैरामीटर का अब उपयोग नहीं किया जाता है।DRY_RUN
औरWAKE_UPON_FIFO_FULL
दोनों अप्रचलित हैं, और इन्हें कभी भीbatch
फ़ंक्शन में पास नहीं किया जाएगा। - बैच टाइमआउट तर्क को अब
max_report_latency
तर्क के रूप में जाना जाता है।