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

सेंसर मल्टी-एचएएल एक ढांचा है जो सेंसर एचएएल को अन्य सेंसर एचएएल के साथ चलने की अनुमति देता है। सेंसर मल्टी-एचएएल विक्रेता विभाजन पर गतिशील पुस्तकालयों के रूप में संग्रहीत सेंसर उप-एचएएल को गतिशील रूप से लोड करता है और उन्हें एक कॉलबैक ऑब्जेक्ट देता है जो घटनाओं को पोस्ट करने और वेक लॉक प्राप्त करने और जारी करने को संभाल सकता है। एक सेंसर सब-एचएएल एक सेंसर एचएएल है जो विक्रेता विभाजन पर एक साझा वस्तु में बनाया गया है और इसका उपयोग मल्टी-एचएएल ढांचे द्वारा किया जाता है। ये सब-एचएएल एक दूसरे पर या मल्टी-एचएएल कोड पर निर्भर नहीं होते हैं जिसमें प्रक्रिया के लिए मुख्य कार्य होता है।

सेंसर मल्टी-एचएएल 2.1, एंड्रॉइड 11 या उच्चतर पर चलने वाले उपकरणों पर उपलब्ध है, सेंसर मल्टी-एचएएल 2.0 का एक पुनरावृत्ति है जो उप-एचएएल को लोड करने का समर्थन करता है जो हिंज एंगल सेंसर प्रकार को उजागर कर सकता है। इस सेंसर प्रकार का समर्थन करने के लिए, उप-एचएएल को 2.1 सबहाल हेडर में परिभाषित उप-एचएएल एपीआई का उपयोग करना चाहिए।

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

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

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

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

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

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

सेंसर्स मल्टी-एचएएल 2 में कुछ बिल्ट-इन सेफ्टी फीचर्स भी हैं। यह उन स्थितियों को संभालता है जहां सेंसर एफएमक्यू भरा हुआ है या जहां एंड्रॉइड सेंसर फ्रेमवर्क पुनरारंभ होता है और सेंसर स्थिति को रीसेट करने की आवश्यकता होती है। इसके अतिरिक्त, जब घटनाओं को HalProxy वर्ग में पोस्ट किया जाता है, लेकिन सेंसर ढांचा तुरंत घटनाओं को स्वीकार करने में असमर्थ होता है, तो सेंसर मल्टी-एचएएल घटनाओं की प्रतीक्षा करते हुए सभी उप-एचएएल में काम जारी रखने की अनुमति देने के लिए घटनाओं को एक पृष्ठभूमि थ्रेड में स्थानांतरित कर सकता है। पोस्ट करना।

स्रोत कोड और संदर्भ कार्यान्वयन

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

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

कार्यान्वयन

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

सेंसर एआईडीएल एचएएल के साथ सेंसर मल्टी-एचएएल का उपयोग करना

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

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

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

एक नए डिवाइस पर सेंसर मल्टी-एचएएल 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 और 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 में पोर्टिंग

मल्टी-एचएएल 2.0 से मल्टी-एचएएल 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 में जोड़े गए नए प्रकारों का उपयोग करती हैं।
  • उप-एचएएल को मल्टी-एचएएल के संस्करण 2.1 उप-एचएएल के रूप में व्यवहार करने के लिए सेंसर्स sensorsHalGetSubHal के बजाय सेंसर्स sensorsHalGetSubHal_2_1 को उजागर करना चाहिए।

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

सेंसर एचएएल 2.0 से सेंसर मल्टी-एचएएल 2.0 में अपग्रेड करते समय, सुनिश्चित करें कि एचएएल कार्यान्वयन निम्नलिखित आवश्यकताओं को पूरा करता है।

HAL . की शुरुआत

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

मल्टी-एचएएल कार्यान्वयन में सेंसर ईवेंट पोस्ट करना

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

WAKE_UP इवेंट

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

गतिशील सेंसर

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

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

सेंसर एचएएल 1.0 से सेंसर मल्टी-एचएएल 2.0 में अपग्रेड करते समय, सुनिश्चित करें कि एचएएल कार्यान्वयन निम्नलिखित आवश्यकताओं को पूरा करता है।

HAL . की शुरुआत

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

उपलब्ध सेंसर को उजागर करना

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

मल्टी-एचएएल कार्यान्वयन में सेंसर ईवेंट पोस्ट करना

सेंसर एचएएल 2.0 में, poll() को बुलाए जाने की प्रतीक्षा करने के बजाय, उप-एचएएल को सेंसर इवेंट उपलब्ध होने पर IHalProxyCallback को लगातार सेंसर इवेंट लिखना चाहिए।

WAKE_UP इवेंट

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

गतिशील सेंसर

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

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

सेंसर मल्टी-एचएएल 1.0 से मौजूदा कार्यान्वयन को पोर्ट करने के लिए, इन चरणों का पालन करें।

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

मान्यकरण

चल रहा वीटीएस

जब आपने सेंसर मल्टी-एचएएल 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

यदि आप AIDL मल्टी-एचएएल शिम लेयर चला रहे हैं, 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 और उसके उप-HALs की वर्तमान स्थिति के बारे में जानकारी तब टर्मिनल को आउटपुट होती है। नीचे दिखाया गया 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 लिए निर्दिष्ट संख्या बड़ी संख्या (1000 या अधिक) है, तो यह इंगित करता है कि सेंसर ढांचे में लिखे जाने के लिए कई घटनाएं लंबित हैं। यह इंगित करता है कि सेंसर सेवा गतिरोध में है या क्रैश हो गई है और सेंसर ईवेंट को संसाधित नहीं कर रही है, या कि सेंसर ईवेंट का एक बड़ा बैच हाल ही में एक उप-एचएएल से पोस्ट किया गया था।

यदि वेक लॉक रेफ काउंट 0 से अधिक है, तो इसका मतलब है कि HalProxy ने वेक लॉक हासिल कर लिया है। यह केवल 0 से अधिक होना चाहिए यदि एक ScopedWakelock जानबूझकर आयोजित किया जा रहा है या यदि वेकअप ईवेंट HalProxy को भेजे गए थे और सेंसर फ्रेमवर्क द्वारा संसाधित नहीं किए गए हैं।

फ़ाइल डिस्क्रिप्टर को HalProxy की डिबग विधि में पास किया जाता है, प्रत्येक उप-HAL को दिया जाता है, इसलिए डेवलपर्स को ISensorsSubHal इंटरफ़ेस के हिस्से के रूप में डीबग विधि को लागू करना चाहिए।