सेंसर एचएएल इंटरफ़ेस, जिसे sensor.h में घोषित किया गया है, एंड्रॉइड फ्रेमवर्क और हार्डवेयर-विशिष्ट सॉफ़्टवेयर के बीच इंटरफ़ेस का प्रतिनिधित्व करता है। HAL कार्यान्वयन को sensor.h में घोषित प्रत्येक फ़ंक्शन को परिभाषित करना चाहिए। मुख्य कार्य हैं:
-
get_sensors_list
- सभी सेंसर की सूची लौटाता है। -
activate
करें - सेंसर को प्रारंभ या बंद करें। -
batch
- नमूना आवृत्ति और अधिकतम रिपोर्टिंग विलंबता जैसे सेंसर के पैरामीटर सेट करता है। -
setDelay
- केवल HAL संस्करण 1.0 में उपयोग किया जाता है। किसी दिए गए सेंसर के लिए नमूना आवृत्ति सेट करता है। -
flush
- निर्दिष्ट सेंसर के फीफो को फ्लश करता है और ऐसा होने पर फ्लश पूर्ण घटना की रिपोर्ट करता है। -
poll
- उपलब्ध सेंसर ईवेंट लौटाता है।
कार्यान्वयन थ्रेड सुरक्षित होना चाहिए और इन कार्यों को विभिन्न थ्रेड्स से कॉल करने की अनुमति देना चाहिए।
इंटरफ़ेस उन कार्यों द्वारा उपयोग किए जाने वाले कई प्रकारों को भी परिभाषित करता है। मुख्य प्रकार हैं:
-
sensors_module_t
-
sensors_poll_device_t
-
sensor_t
-
sensors_event_t
नीचे दिए गए अनुभागों के अलावा, उन प्रकारों के बारे में अधिक जानकारी के लिए sensor.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
सक्रिय/निष्क्रिय करने के लिए सेंसर का हैंडल है। एक सेंसर के हैंडल को उसकी sensor_t संरचना के 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 देता है और अन्यथा ऋणात्मक त्रुटि संख्या देता है।
setDelay(सेंसर, नमूना अवधि)
int (*setDelay)( struct sensors_poll_device_t *dev, int sensor_handle, int64_t sampling_period_ns);
एचएएल संस्करण 1.0 के बाद, यह फ़ंक्शन बहिष्कृत है और इसे कभी नहीं कहा जाता है। इसके बजाय, batch
फ़ंक्शन को sampling_period_ns
पैरामीटर सेट करने के लिए कहा जाता है।
HAL संस्करण 1.0 में, नमूना_पीरियोड_एनएस सेट करने के लिए बैच के बजाय setDelay का उपयोग किया गया था।
फ्लश (सेंसर)
int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);
निर्दिष्ट सेंसर के लिए हार्डवेयर FIFO के अंत में एक फ्लश पूर्ण ईवेंट जोड़ें और FIFO को फ्लश करें; उन घटनाओं को हमेशा की तरह वितरित किया जाता है (यानी: जैसे कि अधिकतम रिपोर्टिंग विलंबता समाप्त हो गई थी) और फीफो से हटा दिया गया था।
फ्लश अतुल्यकालिक रूप से होता है (यानी: यह फ़ंक्शन तुरंत वापस आना चाहिए)। यदि कार्यान्वयन कई सेंसरों के लिए एकल 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
सेंसर के लिए एंड्रॉइड हार्डवेयर मॉड्यूल बनाने के लिए उपयोग किया जाने वाला प्रकार है। HAL के कार्यान्वयन को get_sensors_list फ़ंक्शन को उजागर करने के लिए इस प्रकार के ऑब्जेक्ट HAL_MODULE_INFO_SYM
को परिभाषित करना चाहिए। अधिक जानकारी के लिए sensors_module_t
में sensor_module_t की परिभाषा और hw_module_t
की परिभाषा देखें।
सेंसर_पोल_डिवाइस_टी / सेंसर_पोल_डिवाइस_1_t
sensors_poll_device_1_t
में ऊपर परिभाषित बाकी विधियां शामिल हैं: activate
करें , batch
, flush
करें और poll
करें । इसका common
क्षेत्र (प्रकार का hw_device_t ) एचएएल के संस्करण संख्या को परिभाषित करता है।
सेंसर_टी
sensor_t
एक Android सेंसर का प्रतिनिधित्व करता है। यहाँ इसके कुछ महत्वपूर्ण क्षेत्र हैं:
नाम: एक उपयोगकर्ता-दृश्यमान स्ट्रिंग जो सेंसर का प्रतिनिधित्व करती है। इस स्ट्रिंग में अक्सर अंतर्निहित सेंसर का भाग का नाम, सेंसर का प्रकार, और यह एक वेक-अप सेंसर है या नहीं। उदाहरण के लिए, "LIS2HH12 एक्सेलेरोमीटर", "MAX21000 अनकैलिब्रेटेड Gyroscope", "BMP280 वेक-अप बैरोमीटर", "MPU6515 गेम रोटेशन वेक्टर"
हैंडल: सेंसर को पंजीकृत करते समय या उससे घटनाओं को उत्पन्न करते समय पूर्णांक को संदर्भित करने के लिए उपयोग किया जाता है।
प्रकार: सेंसर का प्रकार। Android सेंसर क्या हैं में सेंसर प्रकार की व्याख्या देखें? अधिक विवरण के लिए, और आधिकारिक सेंसर प्रकारों के लिए सेंसर प्रकार देखें। गैर-आधिकारिक सेंसर प्रकारों के लिए, type
SENSOR_TYPE_DEVICE_PRIVATE_BASE
से प्रारंभ होना चाहिए
stringType: एक स्ट्रिंग के रूप में सेंसर का प्रकार। जब सेंसर का आधिकारिक प्रकार हो, तो SENSOR_STRING_TYPE_*
पर सेट करें। जब सेंसर के पास निर्माता विशिष्ट प्रकार होता है, stringType
टाइप निर्माता रिवर्स डोमेन नाम से शुरू होना चाहिए। उदाहरण के लिए, फिक्शनल-कंपनी में कूल-प्रोडक्ट टीम द्वारा परिभाषित एक सेंसर (जैसे यूनिकॉर्न डिटेक्टर) stringType=”com.fictional_company.cool_product.unicorn_detector”
का उपयोग कर सकता है। गैर-आधिकारिक सेंसर प्रकारों को विशिष्ट रूप से पहचानने के लिए stringType
का उपयोग किया जाता है। प्रकार और स्ट्रिंग प्रकारों के बारे में अधिक जानकारी के लिए sensor.h देखें।
आवश्यक अनुमति: अनुमति का प्रतिनिधित्व करने वाली एक स्ट्रिंग जो अनुप्रयोगों के पास सेंसर को देखने, उसमें पंजीकरण करने और उसका डेटा प्राप्त करने के लिए होनी चाहिए। एक खाली स्ट्रिंग का मतलब है कि अनुप्रयोगों को इस सेंसर तक पहुंचने के लिए किसी अनुमति की आवश्यकता नहीं है। हृदय गति मॉनीटर जैसे कुछ सेंसर प्रकारों के लिए अनिवार्य requiredPermission
। संवेदनशील उपयोगकर्ता जानकारी (जैसे हृदय गति) प्रदान करने वाले सभी सेंसर को अनुमति द्वारा संरक्षित किया जाना चाहिए।
झंडे: इस सेंसर के लिए झंडे, सेंसर के रिपोर्टिंग मोड को परिभाषित करते हैं और सेंसर एक वेक-अप सेंसर है या नहीं। उदाहरण के लिए, वन-शॉट वेक-अप सेंसर में flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP
। ध्वज के बिट्स जो वर्तमान एचएएल संस्करण में उपयोग नहीं किए जाते हैं उन्हें 0 के बराबर छोड़ दिया जाना चाहिए।
maxRange: अधिकतम मान जो सेंसर रिपोर्ट कर सकता है, उसी इकाई में रिपोर्ट किए गए मानों के रूप में। सेंसर [-maxRange; maxRange]
। ध्यान दें कि इसका मतलब है कि सामान्य अर्थ में सेंसर की कुल सीमा 2*maxRange
है। जब सेंसर कई अक्षों पर मानों की रिपोर्ट करता है, तो सीमा प्रत्येक अक्ष पर लागू होती है। उदाहरण के लिए, "+/- 2g" एक्सेलेरोमीटर maxRange = 2*9.81 = 2g
रिपोर्ट करेगा।
रिज़ॉल्यूशन: मान में सबसे छोटा अंतर जिसे सेंसर माप सकता है। आमतौर पर maxRange
और माप में बिट्स की संख्या के आधार पर गणना की जाती है।
शक्ति: सेंसर को सक्षम करने की बिजली लागत, मिलीएम्प्स में। यह लगभग हमेशा अधिक है कि अंतर्निहित सेंसर की डेटाशीट में बिजली की खपत की सूचना दी गई है। अधिक विवरण के लिए बेस सेंसर != भौतिक सेंसर देखें और सेंसर की बिजली खपत को मापने के तरीके के विवरण के लिए पावर मापन प्रक्रिया देखें। यदि सेंसर की बिजली की खपत इस बात पर निर्भर करती है कि डिवाइस चल रहा है या नहीं, तो चलते समय बिजली की खपत power
क्षेत्र में रिपोर्ट की गई है।
minDelay: निरंतर सेंसर के लिए, नमूना अवधि, माइक्रोसेकंड में, सेंसर द्वारा समर्थित सबसे तेज़ दर के अनुरूप। इस मान का उपयोग कैसे किया जाता है, इसके विवरण के लिए sample_period_ns देखें। सावधान रहें कि minDelay
माइक्रोसेकंड में व्यक्त किया जाता है जबकि sampling_period_ns
नैनोसेकंड में होता है। ऑन-चेंज और विशेष रिपोर्टिंग मोड सेंसर के लिए, जब तक कि अन्यथा निर्दिष्ट न हो, minDelay
होना चाहिए। एक-शॉट सेंसर के लिए, यह -1 होना चाहिए।
maxDelay: निरंतर और ऑन-चेंज सेंसर के लिए, नमूना अवधि, माइक्रोसेकंड में, सेंसर द्वारा समर्थित सबसे धीमी दर के अनुरूप। इस मान का उपयोग कैसे किया जाता है, इसके विवरण के लिए sample_period_ns देखें। सावधान रहें कि maxDelay
माइक्रोसेकंड में व्यक्त किया जाता है जबकि sampling_period_ns
नैनोसेकंड में होता है। विशेष और एक-शॉट सेंसर के लिए, maxDelay
0 होना चाहिए।
fifoReservedEventCount: हार्डवेयर फीफो में इस सेंसर के लिए आरक्षित घटनाओं की संख्या। यदि इस सेंसर के लिए एक समर्पित फीफो है, तो fifoReservedEventCount
इस समर्पित फीफो का आकार है। यदि FIFO को अन्य सेंसर के साथ साझा किया जाता है, fifoReservedEventCount
उस सेंसर के लिए आरक्षित FIFO के हिस्से का आकार है। अधिकांश साझा-फीफो सिस्टम पर, और उन सिस्टमों पर जिनके पास हार्डवेयर फीफो नहीं है, यह मान 0 है।
fifoMaxEventCount: इस सेंसर के लिए FIFO में संग्रहीत की जा सकने वाली घटनाओं की अधिकतम संख्या। यह हमेशा fifoReservedEventCount
से बड़ा या बराबर होता है। इस मान का उपयोग यह अनुमान लगाने के लिए किया जाता है कि एक विशिष्ट दर पर सेंसर में पंजीकरण करते समय फीफो कितनी जल्दी पूर्ण हो जाएगा, यह मानते हुए कि कोई अन्य सेंसर सक्रिय नहीं है। उन सिस्टमों पर जिनमें हार्डवेयर फीफो नहीं है, 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
घड़ी से डी-सिंक्रनाइज़ेशन हो सकता है, क्योंकि सेंसर घड़ी बहती है।
डेटा और ओवरलैपिंग फ़ील्ड: सेंसर द्वारा मापा गया मान। उन क्षेत्रों का अर्थ और इकाइयाँ प्रत्येक सेंसर प्रकार के लिए विशिष्ट हैं। डेटा फ़ील्ड के विवरण के लिए sensor.h और विभिन्न सेंसर प्रकारों की परिभाषा देखें। कुछ सेंसर के लिए, status
फ़ील्ड के माध्यम से, डेटा के हिस्से के रूप में रीडिंग की सटीकता की भी रिपोर्ट की जाती है। यह फ़ील्ड केवल उन चुनिंदा सेंसर प्रकारों के लिए पाइप किया जाता है, जो सटीकता मान के रूप में SDK परत पर दिखाई देते हैं। उन सेंसरों के लिए, यह तथ्य कि स्थिति फ़ील्ड को सेट किया जाना चाहिए, उनके सेंसर प्रकार की परिभाषा में उल्लेख किया गया है।
मेटाडेटा फ्लश पूर्ण ईवेंट
मेटाडेटा ईवेंट का प्रकार सामान्य सेंसर ईवेंट के समान होता है: sensors_event_meta_data_t = sensors_event_t
। उन्हें पोल के माध्यम से अन्य सेंसर इवेंट के साथ वापस कर दिया जाता है। उनके पास निम्नलिखित क्षेत्र हैं:
संस्करण: META_DATA_VERSION
होना चाहिए
प्रकार: SENSOR_TYPE_META_DATA
. होना चाहिए
सेंसर, आरक्षित, और टाइमस्टैम्प : 0 . होना चाहिए
meta_data.what: इस घटना के लिए मेटाडेटा प्रकार समाहित करता है। वर्तमान में एक ही मान्य मेटाडेटा प्रकार है: META_DATA_FLUSH_COMPLETE
।
META_DATA_FLUSH_COMPLETE
घटनाएँ एक सेंसर FIFO के फ्लश के पूरा होने का प्रतिनिधित्व करती हैं। जब meta_data.what=META_DATA_FLUSH_COMPLETE
, meta_data.sensor
को उस सेंसर के हैंडल पर सेट किया जाना चाहिए जिसे फ्लश किया गया है। वे तब उत्पन्न होते हैं जब और केवल तभी जब एक सेंसर पर flush
कहा जाता है। अधिक जानकारी के लिए फ्लश फ़ंक्शन पर अनुभाग देखें।