Sensors AIDL HAL

सेंसर हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल), Android सेंसर फ़्रेमवर्क और डिवाइस के सेंसर, जैसे कि एक्सलरोमीटर या जाइरोस्कोप के बीच का इंटरफ़ेस होता है. Sensors HAL उन फ़ंक्शन के बारे में बताता है जिन्हें लागू करना ज़रूरी है, ताकि फ़्रेमवर्क से सेंसर को कंट्रोल किया जा सके.

नए और अपग्रेड किए गए डिवाइसों के लिए, Sensors AIDL HAL, Android 13 और उसके बाद के वर्शन में उपलब्ध है. Sensors AIDL HAL, Sensors HAL 2.1 पर आधारित है. यह AIDL HAL इंटरफ़ेस का इस्तेमाल करता है और हेड ट्रैकर और सीमित ऐक्सिस वाले IMU सेंसर टाइप को दिखाता है.

एआईडीएल HAL इंटरफ़ेस

सेंसर के लिए AIDL HAL का दस्तावेज़, hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl में मौजूद HAL की परिभाषा में मौजूद होता है.

Sensors AIDL HAL लागू करना

Sensors AIDL HAL को लागू करने के लिए, किसी ऑब्जेक्ट को ISensors इंटरफ़ेस को एक्सटेंड़ करना होगा और hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl में बताए गए सभी फ़ंक्शन लागू करने होंगे.

HAL को शुरू करना

इसका इस्तेमाल करने से पहले, Android सेंसर फ़्रेमवर्क को सेंसर एचएएल को शुरू करना होगा. फ़्रेमवर्क, Sensors HAL को तीन पैरामीटर देने के लिए initialize() फ़ंक्शन को कॉल करता है: दो एफ़एमक्यू डिस्क्रिप्टर और ISensorsCallback ऑब्जेक्ट का एक पॉइंटर.

एचएएल, पहले डिस्क्रिप्टर का इस्तेमाल करके इवेंट एफ़एमक्यू बनाता है. इसका इस्तेमाल, फ़्रेमवर्क में सेंसर इवेंट लिखने के लिए किया जाता है. एचएएल, दूसरे डिस्क्रिप्टर का इस्तेमाल करके, वॉकी-अप लॉक एफएमक्यू बनाता है. इसका इस्तेमाल, WAKE_UP सेंसर इवेंट के लिए एचएएल के वॉकी-अप लॉक को रिलीज़ करने पर सिंक करने के लिए किया जाता है. एचएएल को ISensorsCallback ऑब्जेक्ट का पॉइंटर सेव करना होगा, ताकि ज़रूरी कॉलबैक फ़ंक्शन को कॉल किया जा सके.

Sensors HAL को शुरू करते समय, initialize() फ़ंक्शन को पहले फ़ंक्शन के तौर पर कॉल किया जाना चाहिए.

उपलब्ध सेंसर दिखाना

डिवाइस में मौजूद सभी स्टैटिक सेंसर की सूची पाने के लिए, getSensorsList() फ़ंक्शन का इस्तेमाल करें. यह फ़ंक्शन सेंसर की सूची दिखाता है. हर सेंसर को उसके हैंडल से अलग पहचाना जाता है. Sensors HAL को होस्ट करने वाली प्रोसेस के फिर से शुरू होने पर, किसी सेंसर का हैंडल नहीं बदलना चाहिए. डिवाइस के रीबूट होने और सिस्टम सर्वर के रीस्टार्ट होने पर, हैंडल बदल सकते हैं.

अगर कई सेंसर एक ही सेंसर टाइप और वेक-अप प्रॉपर्टी शेयर करते हैं, तो सूची में पहले सेंसर को डिफ़ॉल्ट सेंसर कहा जाता है. साथ ही, इसे उन ऐप्लिकेशन को दिखाया जाता है जो getDefaultSensor(int sensorType, bool wakeUp) फ़ंक्शन का इस्तेमाल करते हैं.

सेंसर की सूची में बदलाव न होना

सेंसर एचएएल को रीस्टार्ट करने के बाद, अगर getSensorsList() के ज़रिए दिखाया गया डेटा, रीस्टार्ट करने से पहले मिली सेंसर सूची की तुलना में काफ़ी बदलाव दिखाता है, तो फ़्रेमवर्क, Android रनटाइम को रीस्टार्ट करने की प्रोसेस शुरू करता है. सेंसर की सूची में हुए अहम बदलावों में, ऐसे मामले शामिल हैं जहां किसी दिए गए हैंडल वाला सेंसर मौजूद नहीं है या उसके एट्रिब्यूट बदल गए हैं या जहां नए सेंसर जोड़े गए हैं. Android रनटाइम को रीस्टार्ट करने से, उपयोगकर्ता को परेशानी होती है. हालांकि, ऐसा करना ज़रूरी है, क्योंकि Android फ़्रेमवर्क अब Android API के उस कॉन्ट्रैक्ट को पूरा नहीं कर सकता जिसमें यह शर्त है कि किसी ऐप्लिकेशन के लाइफ़टाइम के दौरान, स्टैटिक (नॉन-डाइनैमिक) सेंसर में बदलाव नहीं होता. इससे, फ़्रेमवर्क को ऐप्लिकेशन के ज़रिए किए गए सेंसर के चालू अनुरोधों को फिर से सेट अप करने से भी रोका जा सकता है. इसलिए, एचएएल के वेंडर को सलाह दी जाती है कि वे सेंसर की सूची में ऐसे बदलाव न करें जो ज़रूरी न हों.

सेंसर हैंडल के सही तरीके से काम करने की पुष्टि करने के लिए, एचएएल को डिवाइस में मौजूद किसी फ़िज़िकल सेंसर को उसके हैंडल से मैप करना होगा. Sensors HAL इंटरफ़ेस के मुताबिक, इसे लागू करने का कोई खास तरीका तय नहीं किया गया है. हालांकि, डेवलपर के पास इस ज़रूरी शर्त को पूरा करने के लिए कई विकल्प उपलब्ध हैं.

उदाहरण के लिए, सेंसर की सूची को हर सेंसर के तय एट्रिब्यूट के कॉम्बिनेशन का इस्तेमाल करके क्रम से लगाया जा सकता है. जैसे, वेंडर, मॉडल, और सेंसर टाइप. एक और विकल्प इस बात पर निर्भर करता है कि डिवाइस के स्टैटिक सेंसर का सेट, हार्डवेयर में तय होता है. इसलिए, getSensorsList() से वापस आने से पहले, एचएएल को यह पता होना चाहिए कि सभी सेंसर का शुरू होना कब पूरा हो गया. काम करने वाले सेंसर की इस सूची को एचएएल बाइनरी में कंपाइल किया जा सकता है या फ़ाइल सिस्टम में कॉन्फ़िगरेशन फ़ाइल में सेव किया जा सकता है. साथ ही, दिखने के क्रम का इस्तेमाल, स्थिर हैंडल पाने के लिए किया जा सकता है. सबसे अच्छा समाधान, आपके एचएएल के लागू करने से जुड़ी खास जानकारी पर निर्भर करता है. हालांकि, मुख्य ज़रूरत यह है कि एचएएल के रीस्टार्ट होने पर, सेंसर हैंडल में बदलाव न हो.

सेंसर कॉन्फ़िगर करना

किसी सेंसर को चालू करने से पहले, उसे batch() फ़ंक्शन का इस्तेमाल करके, सैंपलिंग पीरियड और रिपोर्टिंग में लगने वाले ज़्यादा से ज़्यादा समय के साथ कॉन्फ़िगर करना होगा.

सेंसर के डेटा को खोए बिना, batch() का इस्तेमाल करके किसी भी समय सेंसर को फिर से कॉन्फ़िगर किया जा सकता है.

सैंपलिंग की अवधि

कॉन्फ़िगर किए जा रहे सेंसर के टाइप के आधार पर, सैंपलिंग पीरियड का मतलब अलग-अलग होता है:

  • लगातार: सेंसर इवेंट लगातार जनरेट होते रहते हैं.
  • बदलाव होने पर: इवेंट, सैंपलिंग पीरियड से ज़्यादा तेज़ी से जनरेट नहीं होते. अगर मेज़र की गई वैल्यू में कोई बदलाव नहीं होता है, तो इवेंट सैंपलिंग पीरियड से धीमी दर से जनरेट हो सकते हैं.
  • एक बार में पूरा डेटा इकट्ठा करना: सैंपलिंग पीरियड को अनदेखा किया जाता है.
  • खास जानकारी: ज़्यादा जानकारी के लिए, सेंसर टाइप देखें.

सैंपलिंग पीरियड और सेंसर के रिपोर्टिंग मोड के बीच के इंटरैक्शन के बारे में जानने के लिए, रिपोर्टिंग मोड देखें.

रिपोर्टिंग में लगने वाला ज़्यादा से ज़्यादा समय

रिपोर्टिंग में लगने वाला ज़्यादा से ज़्यादा समय, नैनोसेकंड में वह ज़्यादा से ज़्यादा समय सेट करता है जिसमें इवेंट को HAL के ज़रिए इवेंट एफ़एमक्यू में लिखे जाने से पहले, हार्डवेयर एफ़आईओ में सेव किया जा सकता है. ऐसा तब होता है, जब SoC चालू हो.

शून्य वैल्यू का मतलब है कि इवेंट को मेज़र करने के तुरंत बाद, उनकी रिपोर्ट कर दी जानी चाहिए. इसके लिए, FIFO को पूरी तरह से स्किप किया जा सकता है या सेंसर से एक इवेंट FIFO में मौजूद होने पर, उसे खाली कर दिया जा सकता है.

उदाहरण के लिए, अगर सोसी चालू है, तो 50 Hz पर चालू किया गया ऐक्सीलेरोमीटर, ज़्यादा से ज़्यादा शून्य रिपोर्टिंग रिटर्न के साथ, हर सेकंड में 50 बार रुकावटें ट्रिगर करता है.

अगर रिपोर्टिंग में लगने वाला ज़्यादा से ज़्यादा समय शून्य से ज़्यादा है, तो सेंसर इवेंट का पता चलने के तुरंत बाद उन्हें रिपोर्ट करने की ज़रूरत नहीं होती. इवेंट को कुछ समय के लिए, हार्डवेयर FIFO में सेव किया जा सकता है और एक साथ कई इवेंट की रिपोर्ट की जा सकती है. हालांकि, ऐसा तब तक ही किया जा सकता है, जब तक किसी भी इवेंट को रिपोर्ट करने में लगने वाला समय, रिपोर्टिंग में लगने वाले ज़्यादा से ज़्यादा समय से ज़्यादा न हो. पिछले बैच के बाद से सभी इवेंट रिकॉर्ड किए जाते हैं और एक साथ दिखाए जाते हैं. इससे SoC को भेजे जाने वाले इंटरप्ट की संख्या कम हो जाती है. साथ ही, सेंसर के डेटा कैप्चर करने और उसे बैच में डालने के दौरान, SoC को कम पावर मोड पर स्विच करने की सुविधा मिलती है.

हर इवेंट का एक टाइमस्टैंप होता है. किसी इवेंट की रिपोर्टिंग में देरी होने पर, इवेंट के टाइमस्टैंप पर कोई असर नहीं पड़ना चाहिए. टाइमस्टैंप सटीक होना चाहिए और वह उस समय से मेल खाना चाहिए जब इवेंट हुआ था, न कि उस समय से जब उसकी शिकायत की गई थी.

सेंसर इवेंट की रिपोर्टिंग के बारे में ज़्यादा जानकारी और ज़रूरी शर्तों के लिए, बैच में भेजना देखें.

सेंसर चालू करना

फ़्रेमवर्क, activate() फ़ंक्शन का इस्तेमाल करके सेंसर को चालू और बंद करता है. किसी सेंसर को चालू करने से पहले, फ़्रेमवर्क को batch() का इस्तेमाल करके सेंसर को कॉन्फ़िगर करना होगा.

किसी सेंसर को बंद करने के बाद, उस सेंसर से मिलने वाले अतिरिक्त सेंसर इवेंट को इवेंट एफ़एमक्यू में नहीं लिखा जाना चाहिए.

फ्लश सेंसर

अगर किसी सेंसर को सेंसर डेटा को बैच में भेजने के लिए कॉन्फ़िगर किया गया है, तो फ़्रेमवर्क flush() को कॉल करके, बैच में भेजे गए सेंसर इवेंट को तुरंत फ़्लश कर सकता है. इससे, चुने गए सेंसर हैंडल के लिए, एक साथ भेजे गए सेंसर इवेंट, इवेंट एफएमक्यू में तुरंत लिखे जाते हैं. सेंसर HAL को flush() को कॉल करने के नतीजे के तौर पर लिखे गए सेंसर इवेंट के आखिर में, फ़्लश पूरा होने का इवेंट जोड़ना होगा.

फ़्लश असाइनॉनिमस तरीके से होता है. इसका मतलब है कि यह फ़ंक्शन तुरंत रिटर्न होना चाहिए. अगर लागू करने के लिए, कई सेंसर के लिए एक FIFO का इस्तेमाल किया जाता है, तो उस FIFO को फ़्लश किया जाता है और फ़्लश पूरा होने का इवेंट सिर्फ़ तय किए गए सेंसर के लिए जोड़ा जाता है.

अगर बताए गए सेंसर में कोई FIFO नहीं है (बफ़रिंग नहीं की जा सकती) या कॉल के समय FIFO खाली था, तो भी flush() को कामयाब होना चाहिए और उस सेंसर के लिए 'फ़्लश पूरा हो गया' इवेंट भेजना चाहिए. यह एक बार में एक फ़ोटो लेने वाले सेंसर के अलावा, सभी सेंसर पर लागू होता है.

अगर flush() को एक बार में काम करने वाले सेंसर के लिए कॉल किया जाता है, तो flush() को BAD_VALUE दिखाना चाहिए और फ़्लश पूरा होने का इवेंट जनरेट नहीं करना चाहिए.

एफएमक्यू में सेंसर इवेंट लिखना

सेंसर एचएएल, सेंसर इवेंट को Android सेंसर फ़्रेमवर्क में पुश करने के लिए, इवेंट एफ़एमक्यू का इस्तेमाल करता है.

इवेंट एफ़एमक्यू, सिंक किया गया एफ़एमक्यू होता है. इसका मतलब है कि उपलब्ध जगह से ज़्यादा इवेंट को एफ़एमक्यू में लिखने की कोशिश करने पर, लिखने की प्रोसेस पूरी नहीं हो पाती. ऐसे मामले में, एचएएल को यह तय करना चाहिए कि इवेंट के मौजूदा सेट को, इवेंट के दो छोटे ग्रुप के तौर पर लिखा जाए या ज़रूरत के हिसाब से जगह होने पर सभी इवेंट को एक साथ लिखा जाए.

जब Sensors HAL ने इवेंट एफ़एमक्यू में ज़रूरत के मुताबिक सेंसर इवेंट लिख दिए हैं, तो Sensors HAL को फ़्रेमवर्क को सूचना देनी होगी कि इवेंट तैयार हैं. इसके लिए, इवेंट एफ़एमक्यू के EventFlag::wake फ़ंक्शन में EventQueueFlagBits::READ_AND_PROCESS बिट लिखना होगा. EventFlag को Event FMQ से बनाया जा सकता है. इसके लिए, EventFlag::createEventFlag और Event FMQ के getEventFlagWord() फ़ंक्शन का इस्तेमाल करें.

Sensors AIDL HAL, इवेंट एफ़एमक्यू पर write और writeBlocking, दोनों के साथ काम करता है. डिफ़ॉल्ट तौर पर लागू होने वाले तरीके से, write का इस्तेमाल करने का रेफ़रंस मिलता है. अगर writeBlocking फ़ंक्शन का इस्तेमाल किया जाता है, तो readNotification फ़्लैग को EventQueueFlagBits::EVENTS_READ पर सेट करना ज़रूरी है. यह फ़्लैग, फ़्रेमवर्क तब सेट करता है, जब वह इवेंट एफ़एमक्यू से इवेंट पढ़ता है. सूचना लिखने के फ़्लैग को EventQueueFlagBits::READ_AND_PROCESS पर सेट करना ज़रूरी है. इससे फ़्रेमवर्क को यह सूचना मिलती है कि इवेंट, इवेंट एफ़एमक्यू में लिखे गए हैं.

WAKE_UP इवेंट

WAKE_UP इवेंट, सेंसर इवेंट होते हैं. इनकी वजह से ऐप्लिकेशन प्रोसेसर (एपी) तुरंत चालू हो जाता है और इवेंट को मैनेज करता है. जब भी इवेंट एफ़एमक्यू में कोई WAKE_UP इवेंट लिखा जाता है, तो सेंसर एचएएल को वेक लॉक सुरक्षित करना होगा. इससे यह पक्का होता है कि फ़्रेमवर्क इवेंट को हैंडल करने तक सिस्टम चालू रहे. WAKE_UP इवेंट मिलने पर, फ़्रेमवर्क अपने वेक लॉक को सुरक्षित कर लेता है. इससे, सेंसर HAL अपने वेक लॉक को रिलीज़ कर पाता है. जब सेंसर HAL अपना वेक लॉक रिलीज़ करता है, तब सिंक करने के लिए वेक लॉक एफ़एमक्यू का इस्तेमाल करें.

Sensors HAL को वेक लॉक एफ़एमक्यू को पढ़ना होगा, ताकि यह पता लगाया जा सके कि फ़्रेमवर्क ने WAKE_UP इवेंट की कितनी संख्या को मैनेज किया है. HAL को WAKE_UP इवेंट के लिए अपना वेक लॉक सिर्फ़ तब रिलीज़ करना चाहिए, जब बिना मैनेज किए गए WAKE_UP इवेंट की कुल संख्या शून्य हो. सेंसर इवेंट को मैनेज करने के बाद, फ़्रेमवर्क उन इवेंट की संख्या की गिनती करता है जिन्हें WAKE_UP इवेंट के तौर पर मार्क किया गया है. साथ ही, यह संख्या फिर से वेक लॉक एफ़एमक्यू में लिख देता है.

फ़्रेमवर्क, Wake Lock FMQ में डेटा लिखने पर, उसमें WakeLockQueueFlagBits::DATA_WRITTEN लिखने की सूचना सेट करता है.

डाइनैमिक सेंसर

डाइनैमिक सेंसर, ऐसे सेंसर होते हैं जो डिवाइस का हिस्सा नहीं होते. हालांकि, इनका इस्तेमाल डिवाइस के इनपुट के तौर पर किया जा सकता है. जैसे, एक्सलरोमीटर वाला गेमपैड.

डाइनैमिक सेंसर कनेक्ट होने पर, ISensorsCallback में मौजूद onDynamicSensorConnected फ़ंक्शन को Sensors HAL से कॉल किया जाना चाहिए. इससे, फ़्रेमवर्क को नए डाइनैमिक सेंसर के बारे में सूचना मिलती है. साथ ही, फ़्रेमवर्क की मदद से सेंसर को कंट्रोल किया जा सकता है और क्लाइंट से सेंसर के इवेंट का इस्तेमाल किया जा सकता है.

इसी तरह, जब कोई डाइनैमिक सेंसर डिसकनेक्ट हो जाता है, तो ISensorsCallback में onDynamicSensorDisconnected फ़ंक्शन को कॉल किया जाना चाहिए, ताकि फ़्रेमवर्क उस सेंसर को हटा सके जो अब उपलब्ध नहीं है.

डायरेक्ट चैनल

डायरेक्ट चैनल, काम करने का एक तरीका है. इसमें सेंसर इवेंट, इवेंट एफ़एमक्यू के बजाय किसी खास मेमोरी में लिखे जाते हैं. ऐसा करने के लिए, Android सेंसर फ़्रेमवर्क को बायपास किया जाता है. डायरेक्ट चैनल रजिस्टर करने वाले क्लाइंट को सेंसर इवेंट को सीधे उस मेमोरी से पढ़ना होगा जिसका इस्तेमाल डायरेक्ट चैनल बनाने के लिए किया गया था. साथ ही, उसे फ़्रेमवर्क के ज़रिए सेंसर इवेंट नहीं मिलेंगे. सामान्य ऑपरेशन के लिए, configDirectReport() फ़ंक्शन batch() जैसा ही होता है. साथ ही, यह डायरेक्ट रिपोर्ट चैनल को कॉन्फ़िगर करता है.

registerDirectChannel() और unregisterDirectChannel() फ़ंक्शन, नया डायरेक्ट चैनल बनाते हैं या मौजूदा चैनल को मिटा देते हैं.

ऑपरेशन मोड

setOperationMode()फ़ंक्शन की मदद से, फ़्रेमवर्क किसी सेंसर को कॉन्फ़िगर कर सकता है, ताकि फ़्रेमवर्क सेंसर डेटा को सेंसर में इंजेक्ट कर सके. यह जांच करने के लिए मददगार है, खास तौर पर फ़्रेमवर्क के नीचे मौजूद एल्गोरिदम के लिए.

injectSensorData() फ़ंक्शन का इस्तेमाल आम तौर पर, सेंसर एचएएल में ऑपरेशनल पैरामीटर को पुश करने के लिए किया जाता है. इस फ़ंक्शन का इस्तेमाल, किसी खास सेंसर में सेंसर इवेंट इंजेक्ट करने के लिए भी किया जा सकता है.

पुष्टि करें

सेंसर एचएएल को लागू करने की पुष्टि करने के लिए, सेंसर सीटीएस और वीटीएस के टेस्ट चलाएं.

सीटीएस टेस्ट

सेंसर सीटीएस टेस्ट, ऑटोमेटेड सीटीएस टेस्ट और मैन्युअल सीटीएस पुष्टि करने वाले ऐप्लिकेशन, दोनों में मौजूद होते हैं.

ऑटोमेटेड टेस्ट, cts/tests/sensor/src/android/hardware/cts में मौजूद होते हैं. इन टेस्ट से, सेंसर की स्टैंडर्ड फ़ंक्शनैलिटी की पुष्टि की जाती है. जैसे, सेंसर चालू करना, एक साथ कई डेटा भेजना, और सेंसर इवेंट की दरें.

CTS Verifier के टेस्ट, cts/apps/CtsVerifier/src/com/android/cts/verifier/sensors में मौजूद हैं. इन टेस्ट के लिए, टेस्ट ऑपरेटर को मैन्युअल इनपुट देना होता है. इससे यह पक्का किया जाता है कि सेंसर सटीक वैल्यू दिखाते हों.

सीटीएस टेस्ट पास करना ज़रूरी है, ताकि यह पक्का किया जा सके कि जांचा जा रहा डिवाइस, सीडीडी की सभी ज़रूरी शर्तों को पूरा करता है.

वीटीएस टेस्ट

सेंसर के AIDL HAL के लिए VTS टेस्ट, hardware/interfaces/sensors/aidl/vts/ में मौजूद होते हैं. इन जांचों से यह पक्का होता है कि Sensors HAL सही तरीके से लागू किया गया है और ISensors.aidl और ISensorsCallback.aidl में बताई गई सभी ज़रूरी शर्तें पूरी की गई हैं.

HAL को शुरू करना

फ़्रेमवर्क और एचएएल के बीच एफ़एमक्यू सेट अप करने के लिए, initialize() फ़ंक्शन का इस्तेमाल किया जाना चाहिए.

उपलब्ध सेंसर दिखाना

Sensors AIDL HAL में, getSensorsList() फ़ंक्शन को डिवाइस के एक बार बूट होने के दौरान एक ही वैल्यू दिखानी चाहिए. ऐसा तब भी होना चाहिए, जब Sensors HAL को फिर से शुरू किया गया हो. getSensorsList() फ़ंक्शन के लिए एक नई ज़रूरी शर्त यह है कि किसी डिवाइस के एक बार बूट होने के दौरान, यह एक ही वैल्यू दिखाए. ऐसा, Sensors HAL के रीस्टार्ट होने के दौरान भी होना चाहिए. इससे, सिस्टम सर्वर के फिर से शुरू होने पर, फ़्रेमवर्क सेंसर कनेक्शन फिर से बनाने की कोशिश कर सकता है. डिवाइस के रीबूट होने के बाद, getSensorsList() से मिली वैल्यू बदल सकती है.

एफएमक्यू में सेंसर इवेंट लिखना

Sensors AIDL HAL में, poll() के कॉल होने का इंतज़ार करने के बजाय, सेंसर इवेंट उपलब्ध होने पर, सेंसर इवेंट को इवेंट एफ़एमक्यू में पहले से लिखना चाहिए. एचएएल की यह भी ज़िम्मेदारी है कि वह EventFlag में सही बिट लिखे, ताकि फ़्रेमवर्क में एफ़एमक्यू को पढ़ा जा सके.

WAKE_UP इवेंट

Sensors HAL 1.0 में, WAKE_UP को poll() पर पोस्ट करने के बाद, poll() को किए जाने वाले किसी भी अगले कॉल पर, HAL किसी भी WAKE_UP इवेंट के लिए अपना वेक लॉक रिलीज़ कर सकता था. इसकी वजह यह थी कि इससे पता चलता था कि फ़्रेमवर्क ने सभी सेंसर इवेंट को प्रोसेस कर लिया है और ज़रूरत पड़ने पर, वेक लॉक भी हासिल कर लिया है. ऐसा इसलिए है, क्योंकि Sensors AIDL HAL में, जब फ़्रेमवर्क, एफ़एमक्यू में लिखे गए इवेंट को प्रोसेस कर लेता है, तब एचएएल को इसकी सूचना नहीं दी जाती. हालांकि, वेक लॉक एफ़एमक्यू की मदद से, फ़्रेमवर्क WAKE_UP इवेंट को हैंडल करने के बाद, एचएएल से संपर्क कर सकता है.

Sensors AIDL HAL में, WAKE_UP इवेंट के लिए Sensors HAL से सुरक्षित किया गया वेक लॉक, SensorsHAL_WAKEUP से शुरू होना चाहिए.

डाइनैमिक सेंसर

Sensors HAL 1.0 में poll() फ़ंक्शन का इस्तेमाल करके, डाइनैमिक सेंसर दिखाए जाते थे. Sensors AIDL HAL के मुताबिक, जब भी सेंसर के डाइनैमिक कनेक्शन बदलते हैं, तो ISensorsCallback में onDynamicSensorsConnected और onDynamicSensorsDisconnected को कॉल किया जाना चाहिए. ये कॉलबैक, initialize() फ़ंक्शन के ज़रिए दिए गए ISensorsCallback पॉइंटर के हिस्से के तौर पर उपलब्ध होते हैं.

ऑपरेशन मोड

WAKE_UP सेंसर के लिए DATA_INJECTION मोड काम करना चाहिए.

कई एचएएल के साथ काम करने की सुविधा

सेंसर के लिए एआईडीएल एचएएल, सेंसर के लिए मल्टी-एचएएल फ़्रेमवर्क का इस्तेमाल करके, मल्टी-एचएएल के साथ काम करता है. लागू करने के बारे में जानकारी के लिए, Sensors HAL 2.1 से पोर्ट करना लेख पढ़ें.