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

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

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

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

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

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

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

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

सेंसर मल्टी-HAL 2 और सेंसर 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 के साथ संगत होने के लिए अनुसरण करें. सब-एचएएल, शुरू करने के तरीके को लागू करता है, ताकि 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 AIDL HAL के साथ Sensors Multi-HAL का इस्तेमाल करना

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

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

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

किसी नए डिवाइस पर सेंसर मल्टी-एचएएल 2.1 लागू करने के लिए, यह तरीका अपनाएं:

  1. यहां बताए गए तरीके से ISensorsSubHal इंटरफ़ेस को लागू करें SubHal.h.
  2. लागू करें sensorsHalGetSubHal_2_1 SubHal.h में तरीका.
  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. यहां से सभी android.hardware.sensors प्रविष्टियां हटाएं manifest.xml फ़ाइल होती है, जिसमें डिवाइस पर काम करने वाले एचएएल की सूची होती है.

  5. android.hardware.sensors सेवा और service.rc फ़ाइलें यहां से हटाएं device.mk फ़ाइल और 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 तक पोर्ट करें

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

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

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

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

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

HAL को शुरू करना

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

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

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

WAKE_UP इवेंट

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

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

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

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

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

HAL को शुरू करना

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

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

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

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

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

WAKE_UP इवेंट

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

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

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

सेंसर मल्टी-एचएएल 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. सेंसर हैल से पोर्ट करना' में बताए गए सब-एचएएल को पोर्ट करें 1.0 के बाद लागू करें.
  4. सेंसर मल्टी-एचएएल 2.0 को तय किए गए एचएएल के तौर पर सेट करें. इसके लिए, तीसरे चरण का पालन करें और लागू करने वाले सेंसर मुटली-एचएएल 2.0 सेक्शन में 4.

पुष्टि करें

वीटीएस चलाना

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

होस्ट मशीन पर 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

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