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

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

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

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

सेंसर मल्टी-एचएएल 2 और सेंसर HAL 2 के बीच अंतर

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

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

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

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

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

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

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

  • HalProxy.h: HalProxy ऑब्जेक्ट को सेंसर मल्टी-एचएएल से इंस्टैंशिएट किया जाता है और यह सब-एचएएल से सेंसर फ़्रेमवर्क तक डेटा पास करने का काम करता है.
  • HalProxy.cpp: HalProxy को लागू करने में, सब-एचएएल और सेंसर फ़्रेमवर्क के बीच मल्टीप्लेक्स कम्यूनिकेशन के लिए ज़रूरी सभी लॉजिक शामिल हैं.
  • SubHal.h: ISensorsSubHal इंटरफ़ेस उस इंटरफ़ेस के बारे में बताता है जिसके मुताबिक सब-एचएएल, HalProxy के साथ काम करते हैं. सब-एचएएल, शुरू करने के तरीके को लागू करता है, ताकि 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/: सब-एचएएल लागू करने के इस उदाहरण में, नकली डेटा जनरेट करने के लिए नकली सेंसर का इस्तेमाल किया जाता है. इस डेटा से यह पता चलता है कि किसी डिवाइस पर एक से ज़्यादा सब-एचएएल कैसे इंटरैक्ट करते हैं.

लागू करने का तरीका

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

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

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

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

सेंसर मल्टी-एचएएल 2.1 लागू करें

किसी नए डिवाइस पर सेंसर मल्टी-एचएएल 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 फ़ाइलें हटाएं. साथ ही, android.hardware.sensors@2.1-service.multihal और android.hardware.sensors@2.1-service.multihal.rc को PRODUCT_PACKAGES में जोड़ें.

चालू होने पर, HalProxy शुरू होता है, लागू किए गए नए सब-एचएएल को खोजता है, और sensorsHalGetSubHal_2_1 को कॉल करके इसे शुरू करता है.

सेंसर मल्टी-एचएएल 2.0 से मल्टी-एचएएल 2.1 तक पोर्ट करें

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

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

  • 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 सब-एचएएल के तौर पर दिखाया जा सके.

सेंसर एचएएल 2.0 से पोर्ट

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

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

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

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

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

WAKE_UP इवेंट

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

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

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

सेंसर एचएएल 1.0 से पोर्ट

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

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

सब-एचएएल और मल्टी-एचएएल लागू करने के बीच कॉलबैक बनाने के लिए, initialize() फ़ंक्शन काम करना चाहिए.

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

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

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

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

WAKE_UP इवेंट

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

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

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

सेंसर मल्टी-एचएएल 1.0 से पोर्ट

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

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

पुष्टि करें

वीटीएस चलाएं

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

जब होस्ट मशीन पर वीटीएस सेट अप हो, तो सिर्फ़ सेंसर वीटीएस की जांच करने के लिए, ये निर्देश अपनाएं:

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 कमांड का इस्तेमाल करके, फ़्रेमवर्क को डीबग कर सकते हैं. सेंसर एचएएल के डीबग आउटपुट का अनुरोध करने के लिए, यह कमांड चलाएं:

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 इंटरफ़ेस के हिस्से के तौर पर डीबग करने के तरीके को लागू करना चाहिए.