सेंसर के लिए मल्टी-एचएएल

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

Sensors Multi-HAL 2.1, Android 11 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों पर उपलब्ध है. यह Sensors Multi-HAL 2.0 का एक वर्शन है. इसमें सब-एचएएल लोड करने की सुविधा है, जो हिंगल ऐंगल सेंसर टाइप को दिखा सकती है. इस तरह के सेंसर का इस्तेमाल करने के लिए, सब-एचएएल को 2.1 सब-एचएएल हेडर में बताए गए सब-एचएएल एपीआई का इस्तेमाल करना होगा.

Android 13 या इसके बाद के वर्शन पर चलने वाले उन डिवाइसों के लिए जिनमें Sensors AIDL HAL का इस्तेमाल किया जाता है, मल्टी-एचएएल की सुविधा चालू करने के लिए, मल्टी-एचएएल शिम लेयर का इस्तेमाल किया जा सकता है. लागू करने के बारे में ज़्यादा जानकारी के लिए, Sensors AIDL HAL के साथ Sensors Multi-HAL का इस्तेमाल करना लेख देखें.

Sensors Multi-HAL 2 और Sensors HAL 2 के बीच का अंतर

Sensors Multi-HAL 2, Android 10 या उसके बाद के वर्शन वाले डिवाइसों पर उपलब्ध है. इसमें Sensors HAL 2 के साथ-साथ कई ऐब्स्ट्रैक्शन भी शामिल हैं. इससे, एचएएल एपीआई के साथ आसानी से इंटरैक्ट किया जा सकता है. सेंसर मल्टी-एचएएल 2 में, HalProxy क्लास को शामिल किया गया है. इससे, सेंसर एचएएल 2 इंटरफ़ेस को लागू करने और HalProxy को सब-एचएएल के साथ इंटरैक्ट करने की अनुमति देने के लिए, V2_1/SubHal (या V2_0/SubHal) इंटरफ़ेस को मैनेज किया जा सकता है.

ISensorsSubHal इंटरफ़ेस, 2.1/ISensors.hal (या 2.0/ISensors.hal) इंटरफ़ेस से इन तरीकों से अलग है:

  • initialize का तरीका, दो एफ़एमक्यू और ISensorsCallback के बजाय IHalProxyCallback क्लास को पास करता है.
  • सब-एचएएल को गड़बड़ी की रिपोर्ट में डीबग करने से जुड़ी जानकारी देने के लिए, डीबग फ़ंक्शन लागू करना होगा.
  • सब-एचएएल में नाम फ़ंक्शन लागू करना ज़रूरी है, ताकि लोड किए गए सब-एचएएल को अन्य सब-एचएएल से अलग किया जा सके.

Sensors Multi-HAL 2 और Sensors HAL 2 के बीच मुख्य अंतर, शुरू करने वाले फ़ंक्शन में है. IHalProxyCallback इंटरफ़ेस, एफ़एमक्यू देने के बजाय दो तरीके उपलब्ध कराता है. पहला तरीका, सेंसर फ़्रेमवर्क में सेंसर इवेंट पोस्ट करने के लिए और दूसरा तरीका, वेक लॉक बनाने के लिए. Sensors Multi-HAL, FMQs के साथ सभी इंटरैक्शन को मैनेज करता है, ताकि सभी सब-एचएएल के लिए सेंसर इवेंट को समय पर डिलीवर किया जा सके. हमारा सुझाव है कि सब-एचएएल, createScopedWakelock तरीके का इस्तेमाल करें, ताकि वे सेंसर मल्टी-एचएएल को, वॉकी-अप लॉक की समयसीमा खत्म होने की जानकारी दे सकें. साथ ही, वे पूरे सेंसर मल्टी-एचएएल के लिए, वॉकी-अप लॉक के इस्तेमाल को एक ही सामान्य वॉकी-अप लॉक पर सेंट्रलाइज़ कर सकें. इससे लॉक और अनलॉक करने के कॉल कम हो जाते हैं.

Sensors Multi-HAL 2 में सुरक्षा से जुड़ी कुछ सुविधाएं पहले से मौजूद हैं. यह उन स्थितियों को मैनेज करता है जहां सेंसर एफ़एमक्यू फ़ुल हो जाता है या Android सेंसर फ़्रेमवर्क रीस्टार्ट हो जाता है और सेंसर की स्थिति को रीसेट करना पड़ता है. इसके अलावा, जब इवेंट HalProxy क्लास में पोस्ट किए जाते हैं, लेकिन सेंसर फ़्रेमवर्क इवेंट को तुरंत स्वीकार नहीं कर पाता है, तो सेंसर मल्टी-एचएएल इवेंट को बैकग्राउंड थ्रेड में ले जा सकता है. इससे इवेंट पोस्ट होने का इंतज़ार करते समय, सभी सब-एचएएल पर काम जारी रखा जा सकता है.

सोर्स कोड और रेफ़रंस लागू करना

सभी सेंसर का मल्टी-एचएएल कोड, hardware/interfaces/sensors/common/default/2.X/multihal/ में उपलब्ध है. यहां कुछ संसाधनों के बारे में बताया गया है.

  • HalProxy.h: HalProxy ऑब्जेक्ट को सेंसर मल्टी-एचएएल से इंस्टैंशिएट किया जाता है. साथ ही, यह सब-एचएएल से सेंसर फ़्रेमवर्क में डेटा भेजने की प्रोसेस को मैनेज करता है.
  • HalProxy.cpp: HalProxy को लागू करने में, सब-एचएएल और सेंसर फ़्रेमवर्क के बीच कम्यूनिकेशन को मल्टीप्लेक्स करने के लिए ज़रूरी सभी लॉजिक शामिल होते हैं.
  • SubHal.h: ISensorsSubHal इंटरफ़ेस, उस इंटरफ़ेस के बारे में बताता है जिसका पालन सब-एचएएल को करना चाहिए, ताकि वे HalProxy के साथ काम कर सकें. सब-एचएएल, initialize मेथड को लागू करता है, ताकि HalProxyCallback ऑब्जेक्ट का इस्तेमाल postEvents और createScopedWakelock के लिए किया जा सके.

    मल्टी-एचएएल 2.0 को लागू करने के लिए, SubHal.h के वर्शन 2.0 का इस्तेमाल करें.

  • hardware/interfaces/sensors/common/default/2.X/multihal/tests/: ये यूनिट टेस्ट, HalProxy के लागू होने की पुष्टि करते हैं.

  • hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/: इस उदाहरण में, सब-एचएएल लागू करने के लिए, फ़र्ज़ी डेटा जनरेट करने के लिए फ़र्ज़ी सेंसर का इस्तेमाल किया गया है. यह टेस्ट करने के लिए काम का है कि एक डिवाइस पर कई सब-एचएएल कैसे इंटरैक्ट करते हैं.

लागू करना

इस सेक्शन में, इन स्थितियों में सेंसर मल्टी-एचएएल को लागू करने का तरीका बताया गया है:

सेंसर एआईडीएल एचएएल के साथ सेंसर मल्टी-एचएएल का इस्तेमाल करना

सेंसर एआईडीएल एचएएल के साथ मल्टी-एचएएल की सुविधा इस्तेमाल करने के लिए, एआईडीएल मल्टी-एचएएल शिम लेयर मॉड्यूल इंपोर्ट करें. यह hardware/interfaces/sensors/aidl/default/multihal/ में मौजूद होता है. यह मॉड्यूल, एआईडीएल और एचआईडीएल सेंसर एचएएल डेफ़िनिशन टाइप के बीच कन्वर्ज़न को मैनेज करता है. साथ ही, सेंसर मल्टी-एचएएल 2.1 को लागू करना में बताए गए मल्टी-एचएएल इंटरफ़ेस के चारों ओर एक रैपर तय करता है. एआईडीएल मल्टी-एचएएल स्HIM लेयर, उन डिवाइसों के साथ काम करती है जिनमें सेंसर मल्टी-एचएएल 2.1 लागू किया गया है.

AIDL मल्टी-एचएएल शिम लेयर की मदद से, Sensors AIDL HAL में हेड ट्रैकर और सीमित ऐक्सिस वाले IMU सेंसर टाइप को दिखाया जा सकता है. एआईडीएल एचएएल इंटरफ़ेस के ज़रिए तय किए गए इन सेंसर टाइप का इस्तेमाल करने के लिए, getSensorsList_2_1() लागू करने के दौरान SensorInfo स्ट्रक्चर में type फ़ील्ड सेट करें. ऐसा करना सुरक्षित है, क्योंकि AIDL और HIDL सेंसर HAL के पूर्णांक वाले सेंसर टाइप फ़ील्ड ओवरलैप नहीं होते.

Sensors Multi-HAL 2.1 लागू करना

किसी नए डिवाइस पर Sensors Multi-HAL 2.1 लागू करने के लिए, यह तरीका अपनाएं:

  1. ISensorsSubHal इंटरफ़ेस को SubHal.h में बताए गए तरीके के मुताबिक लागू करें.
  2. SubHal.h में sensorsHalGetSubHal_2_1 वाला तरीका लागू करें.
  3. हाल ही में लागू किए गए सब-एचएएल को बनाने के लिए, cc_library_shared टारगेट जोड़ें. टारगेट जोड़ते समय:

    1. पक्का करें कि टारगेट को डिवाइस के वेंडर के सेगमेंट में कहीं भी पुश किया गया हो.
    2. /vendor/etc/sensors/hals.conf में मौजूद कॉन्फ़िगरेशन फ़ाइल में, नई लाइन पर लाइब्रेरी का पाथ जोड़ें. अगर ज़रूरी हो, तो hals.conf फ़ाइल बनाएं.

    सब-एचएएल लाइब्रेरी बनाने के लिए Android.bp एंट्री का उदाहरण देखने के लिए, hardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bp देखें.

  4. manifest.xml फ़ाइल से सभी android.hardware.sensors एंट्री हटाएं. इस फ़ाइल में, डिवाइस पर काम करने वाले एचएएल की सूची होती है.

  5. device.mk फ़ाइल से सभी android.hardware.sensors सेवा और service.rc फ़ाइलें हटाएं और PRODUCT_PACKAGES में android.hardware.sensors@2.1-service.multihal और android.hardware.sensors@2.1-service.multihal.rc जोड़ें.

बूट होने पर, HalProxy शुरू होता है और हाल ही में लागू किए गए सब-एचएएल को ढूंढता है. साथ ही, sensorsHalGetSubHal_2_1 को कॉल करके उसे शुरू करता है.

सेंसर के Multi-HAL 2.0 से Multi-HAL 2.1 पर पोर्ट करना

Multi-HAL 2.0 से Multi-HAL 2.1 पर पोर्ट करने के लिए, SubHal इंटरफ़ेस लागू करें और अपने सब-एचएएल को फिर से कंपाइल करें.

2.0 और 2.1 SubHal इंटरफ़ेस के बीच ये अंतर हैं:

  • IHalProxyCallback, ISensors.hal स्पेसिफ़िकेशन के वर्शन 2.1 में बनाए गए टाइप का इस्तेमाल करता है.
  • initialize() फ़ंक्शन, 2.0 SubHal इंटरफ़ेस के बजाय, नया IHalProxyCallback पास करता है
  • सब-एचएएल को getSensorsList और injectSensorData के बजाय, getSensorsList_2_1 और injectSensorData_2_1 को लागू करना होगा. ऐसा इसलिए, क्योंकि ये तरीके ISensors.hal स्पेसिफ़िकेशन के वर्शन 2.1 में जोड़े गए नए टाइप का इस्तेमाल करते हैं.
  • सब-एचएएल को sensorsHalGetSubHal के बजाय sensorsHalGetSubHal_2_1 को एक्सपोज़ करना चाहिए, ताकि मल्टी-एचएएल उन्हें वर्शन 2.1 के सब-एचएएल के तौर पर इस्तेमाल कर सके.

Sensors HAL 2.0 से पोर्ट किया गया

Sensors HAL 2.0 से Sensors Multi-HAL 2.0 पर अपग्रेड करते समय, पक्का करें कि HAL को लागू करने का तरीका इन ज़रूरी शर्तों को पूरा करता हो.

HAL को शुरू करना

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

मल्टी-एचएएल लागू करने के लिए, सेंसर इवेंट पोस्ट करना

सेंसर इवेंट उपलब्ध होने पर, सब-एचएएल को एफएमक्यू के ज़रिए सेंसर इवेंट पोस्ट करने के बजाय, IHalProxyCallback में सेंसर इवेंट लिखने होंगे.

WAKE_UP इवेंट

Sensors HAL 2.0 में, एचएएल, वॉकी-अप लॉक को लागू करने के लिए उसे मैनेज कर सकता है. Sensor Multi-HAL 2.0 में, सब-एचएएल की मदद से, मल्टी-एचएएल को वेक लॉक मैनेज करने की अनुमति मिलती है. साथ ही, createScopedWakelock को ट्रिगर करके, वेक लॉक पाने का अनुरोध किया जा सकता है. मल्टी-एचएएल लागू करने के लिए, 'जागने की सुविधा' वाले इवेंट पोस्ट करते समय, लॉक किए गए स्कोप वाला 'जागने की सुविधा' लॉक हासिल करना और उसे postEvents को पास करना ज़रूरी है.

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

Sensors Multi-HAL 2.0 के लिए ज़रूरी है कि जब भी सेंसर के डाइनैमिक कनेक्शन बदलें, तो IHalProxyCallback में onDynamicSensorsConnected और onDynamicSensorsDisconnected को कॉल किया जाए. ये कॉलबैक, initialize() फ़ंक्शन के ज़रिए दिए गए IHalProxyCallback पॉइंटर के हिस्से के तौर पर उपलब्ध होते हैं.

Sensors HAL 1.0 से पोर्ट किया गया

Sensors HAL 1.0 से Sensors Multi-HAL 2.0 पर अपग्रेड करते समय, पक्का करें कि एचएएल लागू करने की प्रोसेस इन ज़रूरी शर्तों को पूरा करती हो.

HAL को शुरू करना

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

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

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

मल्टी-एचएएल लागू करने के लिए, सेंसर इवेंट पोस्ट करना

Sensors HAL 2.0 में, poll()को कॉल किए जाने का इंतज़ार करने के बजाय, सब-HAL को सेंसर इवेंट उपलब्ध होने पर, IHalProxyCallback में सेंसर इवेंट को पहले से लिखना होगा.

WAKE_UP इवेंट

Sensors HAL 1.0 में, HAL अपने लागू होने के लिए वेक लॉक को मैनेज कर सकता है. Sensor Multi-HAL 2.0 में, सब-एचएएल की मदद से, मल्टी-एचएएल को वेक लॉक मैनेज करने की अनुमति मिलती है. साथ ही, createScopedWakelock को ट्रिगर करके, वेक लॉक पाने का अनुरोध किया जा सकता है. मल्टी-एचएएल लागू करने के लिए, 'जागने की सुविधा' वाले इवेंट पोस्ट करते समय, लॉक किए गए स्कोप वाला 'जागने की सुविधा' लॉक हासिल करना और उसे postEvents को पास करना ज़रूरी है.

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

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

Sensors Multi-HAL 1.0 से पोर्ट करना

किसी मौजूदा लागू किए गए वर्शन को Sensors Multi-HAL 1.0 से पोर्ट करने के लिए, यह तरीका अपनाएं.

  1. पक्का करें कि सेंसर एचएएल कॉन्फ़िगरेशन, /vendor/etc/sensors/hals.conf पर मौजूद हो. इसके लिए, /system/etc/sensors/hals.conf में मौजूद फ़ाइल को किसी दूसरी जगह पर ले जाना पड़ सकता है.
  2. hardware/hardware.h और hardware/sensors.h के सभी रेफ़रंस हटाएं, क्योंकि ये HAL 2.0 के साथ काम नहीं करते.
  3. Sensors HAL 1.0 से पोर्ट करना में बताए गए तरीके से सब-एचएएल पोर्ट करें.
  4. सेंसर मल्टी-एचएएल 2.0 को लागू करना सेक्शन में दिए गए तीसरे और चौथे चरण को पूरा करके, सेंसर मल्टी-एचएएल 2.0 को एचएएल के तौर पर सेट करें.

पुष्टि करें

VTS चलाना

जब आपने एक या उससे ज़्यादा सब-एचएएल को Sensors Multi-HAL 2.1 के साथ इंटिग्रेट कर लिया है, तो वेंडर टेस्ट सुइट (वीटीएस) का इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि आपके सब-एचएएल के लागू होने से, Sensors HAL इंटरफ़ेस की तय की गई सभी ज़रूरी शर्तें पूरी होती हैं.

होस्ट मशीन पर VTS सेट अप होने पर, सिर्फ़ सेंसर के VTS टेस्ट चलाने के लिए, ये कमांड चलाएं:

vts-tradefed run commandAndExit vts \
    --skip-all-system-status-check \
    --primary-abi-only \
    --skip-preconditions \
    --module VtsHalSensorsV2_0Target && \
  vts-tradefed run commandAndExit vts \
    --skip-all-system-status-check \
    --primary-abi-only \
    --skip-preconditions \
    --module VtsHalSensorsV2_1Target

अगर एआईडीएल मल्टी-एचएएल शिम लेयर का इस्तेमाल किया जा रहा है, तो VtsAidlHalSensorsTargetTest चलाएं.

vts-tradefed run commandAndExit vts \
    --skip-all-system-status-check \
    --primary-abi-only \
    --skip-preconditions \
    --module VtsAidlHalSensorsTargetTest

यूनिट टेस्ट चलाना

HalProxy_test.cpp में मौजूद यूनिट टेस्ट, HalProxy की जांच करते हैं. इसके लिए, वे यूनिट टेस्ट में इंस्टैंशिएट किए गए नकली सब-एचएएल का इस्तेमाल करते हैं. ये नकली सब-एचएएल, डाइनैमिक तौर पर लोड नहीं होते. नया सब-एचएएल बनाते समय, इन टेस्ट को यूनिट टेस्ट जोड़ने के तरीके के बारे में गाइड के तौर पर इस्तेमाल किया जाना चाहिए. इससे यह पुष्टि की जा सकती है कि नया सब-एचएएल सही तरीके से लागू किया गया है या नहीं.

जांच करने के लिए, ये कमांड चलाएं:

cd $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests
atest

नकली सब-एचएएल के साथ टेस्ट करना

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

नकली सब-एचएएल का इस्तेमाल करके यह जांच की जा सकती है कि सिस्टम में लोड किए गए अन्य सब-एचएएल के साथ, पूरा मल्टी-एचएएल कोड कैसे काम करता है. साथ ही, इससे सेंसर मल्टी-एचएएल कोड के अलग-अलग पहलुओं पर ज़ोर दिया जा सकता है.

hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/ पर दो फ़र्ज़ी सब-एचएएल उपलब्ध हैं.

किसी डिवाइस पर फ़र्ज़ी सब-एचएएल बनाने और उन्हें पुश करने के लिए, यह तरीका अपनाएं:

  1. डिवाइस पर तीन अलग-अलग फ़ेक सब-एचएएल बनाने और उन्हें पुश करने के लिए, ये कमांड चलाएं:

    $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests/
    mma
    adb push \
      $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so \
      /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so
    adb push \
      $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so \
      /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so
    adb push \
      $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so \
      /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so
  2. /vendor/etc/sensors/hals.conf पर सेंसर एचएएल कॉन्फ़िगरेशन को अपडेट करें. इसके लिए, नकली सब-एचएएल के पाथ का इस्तेमाल करें.

    /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so
    /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so
    /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so
    
  3. HalProxy को रीस्टार्ट करें और कॉन्फ़िगरेशन में दिए गए नए सब-एचएएल लोड करें.

    adb shell stop
    adb shell start

डीबग करना

डेवलपर, lshal कमांड का इस्तेमाल करके फ़्रेमवर्क को डीबग कर सकते हैं. Sensors HAL के डीबग आउटपुट का अनुरोध करने के लिए, यह कमांड चलाएं:

adb root
adb shell lshal debug android.hardware.sensors@2.1::ISensors/default

इसके बाद, HalProxy और उसके सब-एचएएल की मौजूदा स्थिति की जानकारी, टर्मिनल पर भेजी जाती है. यहां HalProxy ऑब्जेक्ट और नकली सब-एचएएल के लिए, निर्देश के आउटपुट का उदाहरण दिया गया है.

Internal values:
  Threads are running: true
  Wakelock timeout start time: 200 ms ago
  Wakelock timeout reset time: 73208 ms ago
  Wakelock ref count: 0
  # of events on pending write queue: 0
  # of non-dynamic sensors across all subhals: 8
  # of dynamic sensors across all subhals: 0
SubHals (2):
  Name: FakeSubHal-OnChange
  Debug dump:
Available sensors:
Name: Ambient Temp Sensor
Min delay: 40000
Flags: 2
Name: Light Sensor
Min delay: 200000
Flags: 2
Name: Proximity Sensor
Min delay: 200000
Flags: 3
Name: Relative Humidity Sensor
Min delay: 40000
Flags: 2
  Name: FakeSubHal-OnChange
  Debug dump:
Available sensors:
Name: Ambient Temp Sensor
Min delay: 40000
Flags: 2
Name: Light Sensor
Min delay: 200000
Flags: 2
Name: Proximity Sensor
Min delay: 200000
Flags: 3
Name: Relative Humidity Sensor
Min delay: 40000
Flags: 2

अगर # of events on pending write queue के लिए दी गई संख्या बहुत ज़्यादा (1,000 या उससे ज़्यादा) है, तो इसका मतलब है कि सेंसर फ़्रेमवर्क में कई इवेंट लिखे जाने बाकी हैं. इससे पता चलता है कि सेंसर सेवा को लॉक किया गया है या वह क्रैश हो गई है और सेंसर इवेंट को प्रोसेस नहीं कर रही है. इसके अलावा, इससे यह भी पता चलता है कि हाल ही में किसी सब-एचएएल से सेंसर इवेंट का एक बड़ा बैच पोस्ट किया गया था.

अगर वेक लॉक रेफ़रंस की संख्या 0 से ज़्यादा है, तो इसका मतलब है कि HalProxy ने वेक लॉक हासिल कर लिया है. यह वैल्यू सिर्फ़ तब 0 से ज़्यादा होनी चाहिए, जब ScopedWakelock को जान-बूझकर होल्ड किया जा रहा हो या HalProxy को वेकअप इवेंट भेजे गए हों और उन्हें सेंसर फ़्रेमवर्क ने प्रोसेस न किया हो.

HalProxy के डीबग तरीके में पास की गई फ़ाइल डिस्क्रिप्टर, हर सब-एचएएल को पास की जाती है. इसलिए, डेवलपर को ISensorsSubHal इंटरफ़ेस के हिस्से के तौर पर डीबग तरीके को लागू करना होगा.