Sensors.h में घोषित Sensors HAL इंटरफ़ेस, एंड्रॉइड फ्रेमवर्क और हार्डवेयर-विशिष्ट सॉफ़्टवेयर के बीच इंटरफ़ेस का प्रतिनिधित्व करता है। एचएएल कार्यान्वयन को सेंसर.एच में घोषित प्रत्येक फ़ंक्शन को परिभाषित करना होगा। मुख्य कार्य हैं:
-
get_sensors_list
- सभी सेंसरों की सूची लौटाता है। -
activate
- सेंसर को प्रारंभ या बंद करता है। -
batch
- सैंपलिंग आवृत्ति और अधिकतम रिपोर्टिंग विलंबता जैसे सेंसर के पैरामीटर सेट करता है। -
setDelay
- केवल एचएएल संस्करण 1.0 में उपयोग किया जाता है। किसी दिए गए सेंसर के लिए नमूना आवृत्ति सेट करता है। -
flush
- निर्दिष्ट सेंसर के फीफो को फ्लश करता है और ऐसा होने पर फ्लश पूर्ण घटना की रिपोर्ट करता है। -
poll
- उपलब्ध सेंसर इवेंट लौटाता है।
कार्यान्वयन थ्रेड सुरक्षित होना चाहिए और इन फ़ंक्शंस को विभिन्न थ्रेड से कॉल करने की अनुमति देनी चाहिए।
इंटरफ़ेस उन फ़ंक्शंस द्वारा उपयोग किए जाने वाले कई प्रकारों को भी परिभाषित करता है। मुख्य प्रकार हैं:
-
sensors_module_t
-
sensors_poll_device_t
-
sensor_t
-
sensors_event_t
नीचे दिए गए अनुभागों के अलावा, उन प्रकारों पर अधिक जानकारी के लिए Sensors.h देखें।
get_sensors_list(सूची)
int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t const** list);
एचएएल द्वारा कार्यान्वित सेंसरों की सूची प्रदान करता है। सेंसर को कैसे परिभाषित किया जाता है, इसके विवरण के लिए Sensor_t देखें।
जिस क्रम में सेंसर सूची में दिखाई देते हैं वही वह क्रम है जिसमें सेंसर अनुप्रयोगों को रिपोर्ट किए जाएंगे। आमतौर पर, बेस सेंसर पहले दिखाई देते हैं, उसके बाद कंपोजिट सेंसर आते हैं।
यदि कई सेंसर समान सेंसर प्रकार और वेक-अप गुण साझा करते हैं, तो सूची में पहले वाले को "डिफ़ॉल्ट" सेंसर कहा जाता है। यह getDefaultSensor(int sensorType, bool wakeUp)
द्वारा लौटाया गया है।
यह फ़ंक्शन सूची में सेंसर की संख्या लौटाता है।
सक्रिय करें (सेंसर, सही/गलत)
int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int enabled);
सेंसर को सक्रिय या निष्क्रिय करता है।
sensor_handle
सक्रिय/निष्क्रिय करने के लिए सेंसर का हैंडल है। एक सेंसर के हैंडल को उसके सेंसर_टी संरचना के handle
फ़ील्ड द्वारा परिभाषित किया जाता है।
enabled
के लिए सेंसर को सक्षम करने के लिए 1 या अक्षम करने के लिए 0 पर सेट किया गया है।
एक-शॉट सेंसर किसी ईवेंट को प्राप्त करने पर स्वचालित रूप से खुद को निष्क्रिय कर देते हैं, और उन्हें activate(..., enabled=0)
के लिए कॉल के माध्यम से निष्क्रिय होने को स्वीकार करना होगा।
नॉन-वेक-अप सेंसर SoC को सस्पेंड मोड में जाने से कभी नहीं रोकते हैं; अर्थात्, एचएएल अनुप्रयोगों की ओर से आंशिक वेक-लॉक नहीं रखेगा।
वेक-अप सेंसर, लगातार ईवेंट वितरित करते समय, SoC को सस्पेंड मोड में जाने से रोक सकते हैं, लेकिन यदि कोई ईवेंट वितरित करने की आवश्यकता नहीं है, तो आंशिक वेक-लॉक जारी किया जाना चाहिए।
यदि enabled
1 है और सेंसर पहले से ही सक्रिय है, तो यह फ़ंक्शन नो-ऑप है और सफल होता है।
यदि enabled
0 है और सेंसर पहले से ही निष्क्रिय है, तो यह फ़ंक्शन नो-ऑप है और सफल होता है।
यह फ़ंक्शन सफल होने पर 0 देता है और अन्यथा एक नकारात्मक त्रुटि संख्या देता है।
बैच (सेंसर, झंडे, नमूना अवधि, अधिकतम रिपोर्ट विलंबता)
int (*batch)( struct sensors_poll_device_1* dev, int sensor_handle, int flags, int64_t sampling_period_ns, int64_t max_report_latency_ns);
नमूना आवृत्ति और अधिकतम रिपोर्ट विलंबता सहित सेंसर के पैरामीटर सेट करता है। सेंसर के सक्रिय होने पर इस फ़ंक्शन को कॉल किया जा सकता है, ऐसी स्थिति में इससे किसी भी सेंसर माप का नुकसान नहीं होना चाहिए: एक नमूना दर से दूसरे में संक्रमण से घटनाओं का नुकसान नहीं हो सकता है, न ही उच्च अधिकतम रिपोर्ट विलंबता से निम्न में संक्रमण हो सकता है अधिकतम रिपोर्ट विलंबता.
sensor_handle
कॉन्फ़िगर करने के लिए सेंसर का हैंडल है।
flags
वर्तमान में अप्रयुक्त हैं।
sampling_period_ns
वह सैंपलिंग अवधि है जिस पर सेंसर को नैनोसेकंड में चलना चाहिए। अधिक विवरण के लिए सैंपलिंग_पीरियड_एनएस देखें।
max_report_latency_ns
वह अधिकतम समय है जिसके द्वारा घटनाओं को HAL के माध्यम से रिपोर्ट किए जाने से पहले नैनोसेकंड में विलंबित किया जा सकता है। अधिक विवरण के लिए max_report_latency_ns पैराग्राफ देखें।
यह फ़ंक्शन सफल होने पर 0 देता है और अन्यथा एक नकारात्मक त्रुटि संख्या देता है।
सेटडिले (सेंसर, नमूना अवधि)
int (*setDelay)( struct sensors_poll_device_t *dev, int sensor_handle, int64_t sampling_period_ns);
एचएएल संस्करण 1.0 के बाद, यह फ़ंक्शन अप्रचलित हो गया है और इसे कभी भी कॉल नहीं किया जाता है। इसके बजाय, sampling_period_ns
पैरामीटर सेट करने के लिए batch
फ़ंक्शन को कॉल किया जाता है।
एचएएल संस्करण 1.0 में, programming_period_ns सेट करने के लिए बैच के बजाय setDelay का उपयोग किया गया था।
फ्लश (सेंसर)
int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);
निर्दिष्ट सेंसर के लिए हार्डवेयर फीफो के अंत में एक फ्लश पूर्ण ईवेंट जोड़ें और फीफो को फ्लश करें; उन घटनाओं को सामान्य रूप से वितरित किया जाता है (अर्थात: जैसे कि अधिकतम रिपोर्टिंग विलंबता समाप्त हो गई हो) और फीफो से हटा दी जाती है।
फ्लश एसिंक्रोनस रूप से होता है (यानी: यह फ़ंक्शन तुरंत वापस आना चाहिए)। यदि कार्यान्वयन कई सेंसरों के लिए एक एकल FIFO का उपयोग करता है, तो वह FIFO फ्लश हो जाता है और फ्लश पूर्ण ईवेंट केवल निर्दिष्ट सेंसर के लिए जोड़ा जाता है।
यदि निर्दिष्ट सेंसर में कोई FIFO नहीं है (कोई बफरिंग संभव नहीं है), या यदि कॉल के समय FIFO खाली था, flush
अभी भी सफल होना चाहिए और उस सेंसर के लिए एक फ्लश पूर्ण ईवेंट भेजना चाहिए। यह वन-शॉट सेंसर के अलावा अन्य सभी सेंसर पर लागू होता है।
जब flush
कहा जाता है, भले ही उस सेंसर के लिए FIFO में पहले से ही एक फ्लश इवेंट मौजूद हो, एक अतिरिक्त इवेंट बनाया जाना चाहिए और FIFO के अंत में जोड़ा जाना चाहिए, और FIFO को फ्लश किया जाना चाहिए। flush
कॉल की संख्या बनाए गए फ्लश पूर्ण ईवेंट की संख्या के बराबर होनी चाहिए।
flush
एक-शॉट सेंसर पर लागू नहीं होता है; यदि sensor_handle
एक-शॉट सेंसर को संदर्भित करता है, flush
-EINVAL
लौटना होगा और कोई फ्लश पूर्ण मेटाडेटा ईवेंट उत्पन्न नहीं करना होगा।
यह फ़ंक्शन सफलता पर 0 लौटाता है, -EINVAL
यदि निर्दिष्ट सेंसर एक-शॉट सेंसर है या सक्षम नहीं था, और अन्यथा एक नकारात्मक त्रुटि संख्या देता है।
जनमत()
int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int count);
data
तर्क भरकर सेंसर डेटा की एक सरणी लौटाता है। ईवेंट उपलब्ध होने तक यह फ़ंक्शन ब्लॉक होना चाहिए। यह सफलता पर पढ़ी गई घटनाओं की संख्या, या त्रुटि के मामले में एक नकारात्मक त्रुटि संख्या लौटाएगा।
data
में लौटाई गई घटनाओं की संख्या count
तर्क से कम या बराबर होनी चाहिए। यह फ़ंक्शन कभी भी 0 (कोई ईवेंट नहीं) लौटाएगा।
कॉलों का क्रम
जब डिवाइस बूट होता है, get_sensors_list
कॉल किया जाता है।
जब कोई सेंसर सक्रिय हो जाता है, तो batch
फ़ंक्शन को अनुरोधित पैरामीटर के साथ कॉल किया जाएगा, उसके बाद activate(..., enable=1)
।
ध्यान दें कि एचएएल संस्करण 1_0 में, क्रम विपरीत था: पहले activate
कॉल किया गया था, उसके बाद set_delay
को।
जब किसी सेंसर के सक्रिय होने के दौरान उसकी अनुरोधित विशेषताएँ बदल रही होती हैं, तो batch
फ़ंक्शन को कॉल किया जाता है।
flush
किसी भी समय कॉल किया जा सकता है, यहां तक कि गैर-सक्रिय सेंसर पर भी (जिस स्थिति में इसे -EINVAL
लौटना होगा)
जब कोई सेंसर निष्क्रिय हो जाता है, activate(..., enable=0)
कॉल किया जाएगा।
उन कॉलों के समानांतर, डेटा का अनुरोध करने के लिए poll
फ़ंक्शन को बार-बार कॉल किया जाएगा। कोई सेंसर सक्रिय न होने पर भी poll
बुलाया जा सकता है।
सेंसर_मॉड्यूल_टी
sensors_module_t
वह प्रकार है जिसका उपयोग सेंसर के लिए Android हार्डवेयर मॉड्यूल बनाने के लिए किया जाता है। HAL के कार्यान्वयन को get_sensors_list फ़ंक्शन को उजागर करने के लिए इस प्रकार के HAL_MODULE_INFO_SYM
ऑब्जेक्ट को परिभाषित करना होगा। अधिक जानकारी के लिए Sensors.h में sensors_module_t
की परिभाषा और hw_module_t
की परिभाषा देखें।
सेंसर्स_पोल_डिवाइस_टी / सेंसर्स_पोल_डिवाइस_1_टी
sensors_poll_device_1_t
में ऊपर परिभाषित बाकी विधियाँ शामिल हैं: activate
, batch
, flush
और poll
। इसका common
फ़ील्ड (प्रकार hw_device_t ) HAL की संस्करण संख्या को परिभाषित करता है।
सेंसर_टी
sensor_t
एक Android सेंसर का प्रतिनिधित्व करता है। यहां इसके कुछ महत्वपूर्ण क्षेत्र दिए गए हैं:
नाम: एक उपयोगकर्ता-दृश्यमान स्ट्रिंग जो सेंसर का प्रतिनिधित्व करती है। इस स्ट्रिंग में अक्सर अंतर्निहित सेंसर का भाग नाम, सेंसर का प्रकार और क्या यह वेक-अप सेंसर है, शामिल होता है। उदाहरण के लिए, "LIS2HH12 एक्सेलेरोमीटर", "MAX21000 अनकैलिब्रेटेड जायरोस्कोप", "BMP280 वेक-अप बैरोमीटर", "MPU6515 गेम रोटेशन वेक्टर"
हैंडल: पूर्णांक का उपयोग सेंसर को पंजीकृत करते समय या उससे ईवेंट उत्पन्न करते समय संदर्भित करने के लिए किया जाता है।
प्रकार: सेंसर का प्रकार. एंड्रॉइड सेंसर क्या हैं? में सेंसर प्रकार की व्याख्या देखें। अधिक जानकारी के लिए, और आधिकारिक सेंसर प्रकारों के लिए सेंसर प्रकार देखें। गैर-आधिकारिक सेंसर प्रकारों के लिए, type
SENSOR_TYPE_DEVICE_PRIVATE_BASE
से प्रारंभ होना चाहिए
स्ट्रिंग प्रकार: एक स्ट्रिंग के रूप में सेंसर का प्रकार। जब सेंसर का आधिकारिक प्रकार हो, तो SENSOR_STRING_TYPE_*
पर सेट करें। जब सेंसर में निर्माता विशिष्ट प्रकार होता है, तो stringType
निर्माता रिवर्स डोमेन नाम से शुरू होना चाहिए। उदाहरण के लिए, फिक्शनल-कंपनी में कूल-प्रोडक्ट टीम द्वारा परिभाषित एक सेंसर (यूनिकॉर्न डिटेक्टर कहें) stringType=”com.fictional_company.cool_product.unicorn_detector”
उपयोग कर सकता है। stringType
का उपयोग गैर-आधिकारिक सेंसर प्रकारों की विशिष्ट पहचान करने के लिए किया जाता है। प्रकारों और स्ट्रिंग प्रकारों पर अधिक जानकारी के लिए Sensors.h देखें।
आवश्यक अनुमति: एक स्ट्रिंग जो उस अनुमति का प्रतिनिधित्व करती है जो अनुप्रयोगों के पास सेंसर को देखने, उसमें पंजीकरण करने और उसका डेटा प्राप्त करने के लिए होनी चाहिए। खाली स्ट्रिंग का मतलब है कि एप्लिकेशन को इस सेंसर तक पहुंचने के लिए किसी अनुमति की आवश्यकता नहीं है। हृदय गति मॉनिटर जैसे कुछ सेंसर प्रकारों के लिए अनिवार्य requiredPermission
होती है। संवेदनशील उपयोगकर्ता जानकारी (जैसे हृदय गति) प्रदान करने वाले सभी सेंसर को अनुमति द्वारा संरक्षित किया जाना चाहिए।
झंडे: इस सेंसर के लिए झंडे, सेंसर के रिपोर्टिंग मोड को परिभाषित करते हैं और सेंसर एक वेक-अप सेंसर है या नहीं। उदाहरण के लिए, एक-शॉट वेक-अप सेंसर flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP
. ध्वज के जो बिट्स वर्तमान एचएएल संस्करण में उपयोग नहीं किए गए हैं उन्हें 0 के बराबर छोड़ा जाना चाहिए।
अधिकतम सीमा: सेंसर द्वारा रिपोर्ट किया जा सकने वाला अधिकतम मान, रिपोर्ट किए गए मानों के समान इकाई में। सेंसर को [-maxRange; maxRange]
। ध्यान दें कि इसका मतलब है कि सामान्य अर्थ में सेंसर की कुल सीमा 2*maxRange
है। जब सेंसर कई अक्षों पर मान रिपोर्ट करता है, तो सीमा प्रत्येक अक्ष पर लागू होती है। उदाहरण के लिए, एक "+/- 2g" एक्सेलेरोमीटर maxRange = 2*9.81 = 2g
रिपोर्ट करेगा।
रिज़ॉल्यूशन: मान में सबसे छोटा अंतर जिसे सेंसर माप सकता है। आमतौर पर maxRange
और माप में बिट्स की संख्या के आधार पर गणना की जाती है।
पावर: सेंसर को सक्षम करने की बिजली लागत, मिलीएम्प्स में। यह लगभग हमेशा अंतर्निहित सेंसर की डेटाशीट में बताई गई बिजली की खपत से अधिक होता है। अधिक विवरण के लिए बेस सेंसर! = भौतिक सेंसर देखें और सेंसर की बिजली खपत को मापने के तरीके के विवरण के लिए पावर माप प्रक्रिया देखें। यदि सेंसर की बिजली खपत इस बात पर निर्भर करती है कि उपकरण चल रहा है या नहीं, तो चलते समय बिजली की खपत power
क्षेत्र में रिपोर्ट की जाएगी।
न्यूनतम विलंब: निरंतर सेंसर के लिए, नमूना अवधि, माइक्रोसेकंड में, सेंसर द्वारा समर्थित सबसे तेज़ दर के अनुरूप। इस मान का उपयोग कैसे किया जाता है, इसके विवरण के लिए सैंपलिंग_पीरियड_एनएस देखें। सावधान रहें कि minDelay
माइक्रोसेकंड में व्यक्त किया जाता है जबकि sampling_period_ns
नैनोसेकंड में व्यक्त किया जाता है। ऑन-चेंज और विशेष रिपोर्टिंग मोड सेंसर के लिए, जब तक कि अन्यथा निर्दिष्ट न हो, minDelay
0 होना चाहिए। एक-शॉट सेंसर के लिए, यह -1 होना चाहिए।
अधिकतम विलंब: निरंतर और ऑन-चेंज सेंसर के लिए, नमूना अवधि, माइक्रोसेकंड में, सेंसर द्वारा समर्थित सबसे धीमी दर के अनुरूप होती है। इस मान का उपयोग कैसे किया जाता है, इसके विवरण के लिए सैंपलिंग_पीरियड_एनएस देखें। सावधान रहें कि maxDelay
माइक्रोसेकंड में व्यक्त किया जाता है जबकि sampling_period_ns
नैनोसेकंड में व्यक्त किया जाता है। विशेष और एक-शॉट सेंसर के लिए, maxDelay
0 होना चाहिए।
fifoReservedEventCount: हार्डवेयर FIFO में इस सेंसर के लिए आरक्षित घटनाओं की संख्या। यदि इस सेंसर के लिए एक समर्पित FIFO है, तो fifoReservedEventCount
इस समर्पित FIFO का आकार है। यदि FIFO को अन्य सेंसर के साथ साझा किया जाता है, तो fifoReservedEventCount
FIFO के उस हिस्से का आकार है जो उस सेंसर के लिए आरक्षित है। अधिकांश साझा-फीफो सिस्टम पर, और उन सिस्टम पर जिनमें हार्डवेयर फीफो नहीं है, यह मान 0 है।
fifoMaxEventCount: इस सेंसर के लिए FIFO में संग्रहीत की जा सकने वाली घटनाओं की अधिकतम संख्या। यह हमेशा fifoReservedEventCount
से बड़ा या बराबर होता है। इस मान का उपयोग यह अनुमान लगाने के लिए किया जाता है कि किसी विशिष्ट दर पर सेंसर में पंजीकरण करते समय FIFO कितनी जल्दी पूर्ण हो जाएगा, भले ही कोई अन्य सेंसर सक्रिय न हो। जिन सिस्टमों में हार्डवेयर FIFO नहीं है, उन पर fifoMaxEventCount
0 है। अधिक जानकारी के लिए बैचिंग देखें।
आधिकारिक सेंसर प्रकार वाले सेंसर के लिए, कुछ फ़ील्ड फ़्रेमवर्क द्वारा अधिलेखित हैं। उदाहरण के लिए, एक्सेलेरोमीटर सेंसर को निरंतर रिपोर्टिंग मोड के लिए मजबूर किया जाता है, और हृदय गति मॉनिटर को SENSOR_PERMISSION_BODY_SENSORS
अनुमति द्वारा संरक्षित करने के लिए मजबूर किया जाता है।
सेंसर्स_इवेंट_टी
एंड्रॉइड सेंसर द्वारा उत्पन्न और पोल फ़ंक्शन के माध्यम से रिपोर्ट किए गए सेंसर इवेंट type sensors_event_t
के होते हैं। यहां sensors_event_t
के कुछ महत्वपूर्ण क्षेत्र दिए गए हैं:
संस्करण: sizeof(struct sensors_event_t)
होना चाहिए
सेंसर: सेंसर का हैंडल जिसने घटना उत्पन्न की, जैसा कि sensor_t.handle
द्वारा परिभाषित किया गया है।
प्रकार: सेंसर का सेंसर प्रकार जिसने घटना उत्पन्न की, जैसा कि sensor_t.type
द्वारा परिभाषित किया गया है।
टाइमस्टैम्प: नैनोसेकंड में घटना का टाइमस्टैम्प। यह वह समय है जब घटना घटित हुई (एक कदम उठाया गया था, या एक्सेलेरोमीटर माप लिया गया था), न कि वह समय जब घटना की सूचना दी गई थी। timestamp
elapsedRealtimeNano
घड़ी के साथ सिंक्रनाइज़ किया जाना चाहिए, और निरंतर सेंसर के मामले में, जिटर छोटा होना चाहिए। सीडीडी आवश्यकताओं को पूरा करने के लिए टाइमस्टैम्प फ़िल्टरिंग कभी-कभी आवश्यक होती है, क्योंकि टाइमस्टैम्प सेट करने के लिए केवल एसओसी इंटरप्ट समय का उपयोग करने से बहुत अधिक घबराहट होती है, और टाइमस्टैंप सेट करने के लिए केवल सेंसर चिप समय का उपयोग करने से बीता elapsedRealtimeNano
घड़ी से डी-सिंक्रनाइज़ेशन हो सकता है। सेंसर घड़ी भटकती है।
डेटा और ओवरलैपिंग फ़ील्ड: सेंसर द्वारा मापा गया मान। उन क्षेत्रों का अर्थ और इकाइयाँ प्रत्येक सेंसर प्रकार के लिए विशिष्ट हैं। डेटा फ़ील्ड के विवरण के लिए Sensors.h और विभिन्न सेंसर प्रकारों की परिभाषा देखें। कुछ सेंसरों के लिए, रीडिंग की सटीकता को status
फ़ील्ड के माध्यम से डेटा के हिस्से के रूप में भी रिपोर्ट किया जाता है। यह फ़ील्ड केवल उन चुनिंदा सेंसर प्रकारों के लिए पाइप किया जाता है, जो सटीकता मान के रूप में एसडीके परत पर दिखाई देते हैं। उन सेंसरों के लिए, यह तथ्य कि स्थिति फ़ील्ड सेट की जानी चाहिए, उनके सेंसर प्रकार की परिभाषा में उल्लिखित है।
मेटाडेटा संपूर्ण घटनाओं को फ्लश करता है
मेटाडेटा इवेंट का प्रकार सामान्य सेंसर इवेंट के समान होता है: sensors_event_meta_data_t = sensors_event_t
। उन्हें मतदान के माध्यम से अन्य सेंसर घटनाओं के साथ वापस लौटाया जाता है। उनके पास निम्नलिखित क्षेत्र हैं:
संस्करण: META_DATA_VERSION
होना चाहिए
प्रकार: SENSOR_TYPE_META_DATA
होना चाहिए
सेंसर, आरक्षित और टाइमस्टैम्प : 0 होना चाहिए
मेटा_डेटा.क्या: इस इवेंट के लिए मेटाडेटा प्रकार शामिल है। वर्तमान में एक ही मान्य मेटाडेटा प्रकार है: META_DATA_FLUSH_COMPLETE
.
META_DATA_FLUSH_COMPLETE
ईवेंट एक सेंसर FIFO के फ्लश के पूरा होने का प्रतिनिधित्व करते हैं। जब meta_data.what=META_DATA_FLUSH_COMPLETE
, meta_data.sensor
को फ्लश किए गए सेंसर के हैंडल पर सेट किया जाना चाहिए। वे तब उत्पन्न होते हैं जब और केवल तभी सेंसर पर flush
बुलाया जाता है। अधिक जानकारी के लिए फ्लश फ़ंक्शन पर अनुभाग देखें।