एचएएल संस्करण बहिष्करण

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 तर्क के रूप में संदर्भित किया जाता है।