HAL वर्शन का बंद होना

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 को अब कॉल नहीं किया जाएगा.

अगर एक साथ कई फ़ंक्शन लागू नहीं किए जाते, तो batch को लागू करने के लिए, दिए गए sampling_period_ns पैरामीटर के साथ अपने मौजूदा setDelay फ़ंक्शन को कॉल करें.

फ़्लश फ़ंक्शन लागू करना

भले ही, आपने एक साथ कई अनुरोध भेजने की सुविधा लागू न की हो, लेकिन आपको flush फ़ंक्शन लागू करना होगा.

अगर एक साथ कई अनुरोध करने की सुविधा लागू नहीं की जाती है, तो flush को एक META_DATA_FLUSH_COMPLETE इवेंट जनरेट करना होगा और 0 (सफल) दिखाना होगा.

sensors_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: सभी आधिकारिक Android सेंसर (sensors.h में बताए गए) के लिए 0 पर सेट करें, क्योंकि फ़्रेमवर्क इस वैल्यू को ओवरराइट कर देगा. अगर आपको किसी ऐसे सेंसर का इस्तेमाल करना है जो आधिकारिक नहीं है, तो sensor_t देखें. इसमें, सेंसर सेट अप करने का तरीका बताया गया है.

requiredPermission: यह वह अनुमति है जो ऐप्लिकेशन को आपके सेंसर को ऐक्सेस करने के लिए चाहिए. आम तौर पर, अपने सभी सेंसर के लिए इसे 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_CONTINUOUS_MODE, बदलाव होने पर जानकारी देने वाले सेंसर के लिए SENSOR_FLAG_ON_CHANGE_MODE, प्रॉक्सिमिटी के अलावा अन्य सेंसर के लिए SENSOR_FLAG_SPECIAL_REPORTING_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 गलत या नेगेटिव हो.
  • किसी सेंसर में एक साथ कई डेटा भेजने की सुविधा है या नहीं, यह इस बात से तय होता है कि उसमें fifoMaxEventCount 0 से ज़्यादा वैल्यू है या नहीं. (पिछले वर्शन में, यह batch() की रिटर्न वैल्यू पर आधारित था.)
  • बैच में भेजने की सुविधा वाले सेंसर हमेशा उसी मोड में होते हैं जिसे हमने पिछले वर्शन में “बैच मोड” कहा था: भले ही max_report_latency_ns पैरामीटर 0 हो, फिर भी सेंसर को बैच में भेजा जाना चाहिए. इसका मतलब है कि SoC के निलंबित मोड में जाने पर, इवेंट को FIFO में सेव किया जाना चाहिए.
  • batch फ़ंक्शन के flags पैरामीटर का इस्तेमाल अब नहीं किया जाता. DRY_RUN और WAKE_UPON_FIFO_FULL, दोनों अब काम नहीं करते. इन्हें batch फ़ंक्शन में कभी पास नहीं किया जाएगा.
  • बैच टाइम आउट आर्ग्युमेंट को अब max_report_latency आर्ग्युमेंट कहा जाता है.