Sensors AIDL HAL

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

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

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

सेंसर एआईडीएल एचएएल के लिए, दस्तावेज़ का मुख्य सोर्स, हार्डवेयर/इंटरफ़ेस/सेंसर/एआईडीएल/android/hardware/sensors/ISensors.aidl पर मौजूद एचएएल की डेफ़िनिशन है .

सेंसर एआईडीएल एचएएल लागू करना

सेंसर एआईडीएल एचएएल लागू करने के लिए, किसी ऑब्जेक्ट को ISensors इंटरफ़ेस को बढ़ाना होगा. साथ ही, हार्डवेयर/इंटरफ़ेस/सेंसर/एआईडीएल/android/hardware/sensors/ISensors.aidl में तय किए गए सभी फ़ंक्शन लागू करने होंगे.

एचएएल को शुरू करना

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

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

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

उपलब्ध सेंसर की जानकारी देना

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

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

सेंसर की सूची की स्थिरता

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

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

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

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

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

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

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

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

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

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

रिपोर्टिंग की ज़्यादा से ज़्यादा लेटेंसी

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

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

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

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

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

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

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

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

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

सेंसर फ़्लश करना

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

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

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

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

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

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

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

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

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

WAKE_UP इवेंट

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

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

फ़्रेमवर्क, वेक लॉक एफएमक्यू में डेटा लिखने पर, वेक लॉक एफएमक्यू पर WakeLockQueueFlagBits::DATA_WRITTEN राइट नोटिफ़िकेशन सेट करता है.

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

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

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

इसी तरह, डाइनैमिक सेंसर के डिसकनेक्ट होने पर, ISensorsCallback में मौजूद onDynamicSensorDisconnected फ़ंक्शन को कॉल करना होगा, ताकि फ़्रेमवर्क, ऐसे सेंसर को हटा सके जो अब उपलब्ध नहीं है.

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

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

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

ऑपरेशन मोड

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

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

सत्यापन

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

सीटीएस टेस्ट

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

ऑटोमेटेड टेस्ट, cts/tests/sensor/src/android/hardware/cts में मौजूद होते हैं. इन टेस्ट से, सेंसर की स्टैंडर्ड सुविधाओं की पुष्टि की जाती है. जैसे, सेंसर चालू करना, बैचिंग, और सेंसर इवेंट की दरें.

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

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

वीटीएस टेस्ट

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

एचएएल को शुरू करना

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

उपलब्ध सेंसर की जानकारी देना

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

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

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

WAKE_UP इवेंट

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

सेंसर एआईडीएल एचएएल में, WAKE_UP इवेंट के लिए सेंसर एचएएल के सुरक्षित किए गए वेक लॉक की शुरुआत SensorsHAL_WAKEUP से होनी चाहिए.

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

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

ऑपरेशन मोड

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

मल्टी-एचएएल की सुविधा

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