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

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

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

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

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

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

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

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

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

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

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

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

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

    Multi-HAL 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/: इस उदाहरण में, सब-एचएएल को लागू करने के लिए फ़र्ज़ी सेंसर का इस्तेमाल किया गया है, ताकि फ़र्ज़ी डेटा जनरेट किया जा सके. यह जांच करने के लिए उपयोगी है कि किसी डिवाइस पर कई सब-एचएएल कैसे इंटरैक्ट करते हैं.

लागू करना

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

Sensors AIDL HAL के साथ Sensors Multi-HAL का इस्तेमाल करना

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

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

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

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

  1. SubHal.h में बताए गए तरीके से, ISensorsSubHal इंटरफ़ेस लागू करें.
  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 को कॉल करके इसे शुरू करता है.

सेंसर मल्टी-एचएएल 2.0 से मल्टी-एचएएल 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 के बजाय, एक नया IHalProxyCallback पास करता है
  • सब-एचएएल को getSensorsList और injectSensorData के बजाय getSensorsList_2_1 और injectSensorData_2_1 लागू करने चाहिए, क्योंकि ये तरीके ISensors.hal स्पेसिफ़िकेशन के वर्शन 2.1 में जोड़े गए नए टाइप का इस्तेमाल करते हैं.
  • मल्टी-एचएएल को सब-एचएएल के तौर पर इस्तेमाल करने के लिए, सब-एचएएल को sensorsHalGetSubHal_2_1 के बजाय sensorsHalGetSubHal को दिखाना होगा.

सेंसर एचएएल 2.0 से पोर्ट किया गया

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

HAL शुरू करना

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

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

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

WAKE_UP इवेंट

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

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

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

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

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

HAL शुरू करना

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

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

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

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

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

WAKE_UP इवेंट

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

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

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

Sensors Multi-HAL 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. Sensors HAL 1.0 से पोर्ट करने के बारे में जानकारी में बताए गए तरीके से, सब-एचएएल पोर्ट करें.
  4. Sensors Multi-HAL 2.0 को लागू करना सेक्शन में दिए गए तीसरे और चौथे चरण को पूरा करके, Sensors Multi-HAL 2.0 को डेज़िग्नेटेड एचएएल के तौर पर सेट करें.

Validation

वीटीएस चलाएं

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

अगर होस्ट मशीन पर वीटीएस सेट अप किया गया है और आपको सिर्फ़ सेंसर के वीटीएस टेस्ट चलाने हैं, तो ये कमांड चलाएं:

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

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

दो फ़र्ज़ी सब-एचएएल, 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 पर मौजूद सेंसर HAL कॉन्फ़िगरेशन को, फ़र्ज़ी सब-HAL के पाथ के साथ अपडेट करें.

    /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 ऑब्जेक्ट और फ़र्ज़ी सब-HAL के लिए, कमांड आउटपुट का उदाहरण दिया गया है.

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 की डीबग करने की विधि को पास किया गया फ़ाइल डिस्क्रिप्टर, हर सब-HAL को पास किया जाता है. इसलिए, डेवलपर को डीबग करने की विधि को HalProxy इंटरफ़ेस के हिस्से के तौर पर लागू करना होगा.ISensorsSubHal