Android के L रिलीज़ में, हम कुछ सेंसर HAL संस्करणों के लिए समर्थन रोक रहे हैं। केवल समर्थित संस्करण 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
अब और नहीं कहा जाएगा।
यदि आप बैचिंग को लागू नहीं करते हैं, तो आप केवल अपने मौजूदा setDelay
फ़ंक्शन को प्रदान किए गए sampling_period_ns
पैरामीटर के साथ कॉल करके batch
को लागू कर सकते हैं।
फ्लश फ़ंक्शन लागू करें
यहां तक कि अगर आप बैचिंग को लागू नहीं करते हैं, तो आपको flush
फ़ंक्शन को लागू करना होगा।
यदि आप बैचिंग लागू नहीं करते हैं, तो flush
को एक META_DATA_FLUSH_COMPLETE
ईवेंट जेनरेट करना होगा और 0 (सफलता) वापस करना होगा।
अपने sensor_poll_device_t.common.version बदलें
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
अपने सेंसर की परिभाषा में नए फ़ील्ड जोड़ें
प्रत्येक सेंसर को परिभाषित करते समय, सामान्य sensor_t फ़ील्ड के अलावा:
.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 पर सेट करें
stringType : सभी आधिकारिक एंड्रॉइड सेंसर (वे जो sensor.h में परिभाषित हैं) के लिए 0 पर सेट करें, क्योंकि यह मान फ्रेमवर्क द्वारा अधिलेखित हो जाएगा। गैर-आधिकारिक सेंसर के लिए, इसे कैसे सेट करें, इसके विवरण के लिए sensor_t देखें।
आवश्यक अनुमति: यह अनुमति है कि आपके सेंसर तक पहुंच प्राप्त करने के लिए अनुप्रयोगों की आवश्यकता होगी। आप आमतौर पर अपने सभी सेंसर के लिए इसे 0 पर सेट कर सकते हैं, लेकिन HEART_RATE
पर सेट करना होगा SENSOR_PERMISSION_BODY_SENSORS.
maxDelay : यह मान महत्वपूर्ण है और आपको इसे सेंसर और उसके चालक की क्षमताओं के अनुसार सेट करने की आवश्यकता होगी।
यह मान केवल निरंतर और ऑन-चेंज सेंसर के लिए परिभाषित किया गया है। यह दो सेंसर घटनाओं के बीच की देरी है जो इस सेंसर का समर्थन करने वाली सबसे कम आवृत्ति के अनुरूप है। जब batch
फ़ंक्शन के माध्यम से कम आवृत्तियों का अनुरोध किया जाता है, तो इसके बजाय इस आवृत्ति पर ईवेंट उत्पन्न किए जाएंगे। इसका उपयोग फ्रेमवर्क या एप्लिकेशन द्वारा यह अनुमान लगाने के लिए किया जा सकता है कि बैच FIFO कब भरा हो सकता है। यदि यह मान ठीक से सेट नहीं किया गया है, तो CTS विफल हो जाएगा। एक-शॉट और विशेष रिपोर्टिंग मोड सेंसर के लिए, 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
निकटता सेंसर और Android आधिकारिक झुकाव डिटेक्टर सेंसर के लिए SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
।
1_1 या 1_2 . से अपग्रेड करते समय नोट
-
batch
फ़ंक्शन अब लगभग-हमेशा सफल होता है, यहां तक कि उन सेंसर के लिए भी जो बैचिंग का समर्थन नहीं करते हैं, टाइमआउट तर्क के मूल्य से स्वतंत्र। केवल ऐसे मामले जहांbatch
फ़ंक्शन विफल हो सकता है, आंतरिक त्रुटियां, या खराबsensor_handle,
या नकारात्मकsampling_period_ns
या नकारात्मकmax_report_latency_ns
। - क्या कोई सेंसर बैचिंग का समर्थन करता है, यह इस बात से परिभाषित होता है कि क्या उसके पास 0 से अधिक
fifoMaxEventCount
है। (पिछले संस्करणों में, यहbatch()
के वापसी मूल्य पर आधारित था।) - बैचिंग का समर्थन करने वाले सेंसर हमेशा पिछले संस्करणों में "बैच मोड" कहलाते हैं: भले ही
max_report_latency_ns
पैरामीटर 0 है, फिर भी सेंसर को बैच किया जाना चाहिए, जिसका अर्थ है कि घटनाओं को फीफो में संग्रहीत किया जाना चाहिए जब एसओसी निलंबित मोड में जाता है . -
batch
फ़ंक्शन केflags
पैरामीटर का अब उपयोग नहीं किया जाता है।DRY_RUN
औरWAKE_UPON_FIFO_FULL
दोनों पदावनत हैं, और उन्हें कभी भीbatch
फ़ंक्शन में पास नहीं किया जाएगा। - बैच टाइमआउट तर्क को अब
max_report_latency
तर्क के रूप में संदर्भित किया जाता है।