सेंसर मल्टी-एचएएल एक ऐसा फ़्रेमवर्क है जो सेंसर एचएएल को अन्य सेंसर एचएएल के साथ चलाने की अनुमति देता है. सेंसर मल्टी-एचएएल, वेंडर पार्टीशन पर डाइनैमिक लाइब्रेरी के तौर पर सेव किए गए सेंसर सब-एचएएल को डाइनैमिक तरीके से लोड करता है. साथ ही, उन्हें कॉलबैक ऑब्जेक्ट देता है. यह ऑब्जेक्ट, इवेंट पोस्ट करने के साथ-साथ वेक लॉक को पाने और छोड़ने की प्रोसेस को मैनेज कर सकता है. सेंसर सब-एचएएल, सेंसर एचएएल होता है. इसे वेंडर पार्टीशन पर मौजूद शेयर किए गए ऑब्जेक्ट में बनाया जाता है. इसका इस्तेमाल मल्टी-एचएएल फ़्रेमवर्क करता है. ये सब-एचएएल, एक-दूसरे पर या मल्टी-एचएएल कोड पर निर्भर नहीं होते. इस कोड में प्रोसेस के लिए मुख्य फ़ंक्शन होता है.
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 उपलब्ध कराने के बजाय दो तरीके उपलब्ध कराता है. एक तरीका, सेंसर फ़्रेमवर्क को सेंसर इवेंट पोस्ट करने के लिए होता है और दूसरा तरीका, वेक लॉक बनाने के लिए होता है. सेंसर मल्टी-एचएएल, सभी 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 Multi-HAL 2.1 को लागू करना
- Sensors Multi-HAL 2.0 से Multi-HAL 2.1 पर पोर्ट करना
- Sensors HAL 2.0 से पोर्ट करना
- Sensors HAL 1.0 से पोर्ट करना
- Sensors Multi-HAL 1.0 से पोर्ट करना
सेंसर एआईडीएल एचएएल के साथ, सेंसर मल्टी-एचएएल का इस्तेमाल करना
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 लागू करने के लिए, यह तरीका अपनाएं:
SubHal.hमें बताए गए तरीके से,ISensorsSubHalइंटरफ़ेस लागू करें.SubHal.hमेंsensorsHalGetSubHal_2_1तरीके को लागू करें.नए तरीके से लागू किए गए सब-एचएएल को बनाने के लिए,
cc_library_sharedटारगेट जोड़ें. टारगेट जोड़ते समय:- पक्का करें कि टारगेट को डिवाइस के वेंडर पार्टीशन में कहीं पुश किया गया हो.
/vendor/etc/sensors/hals.confपर मौजूद कॉन्फ़िगरेशन फ़ाइल में, लाइब्रेरी का पाथ नई लाइन में जोड़ें. अगर ज़रूरी हो, तोhals.confफ़ाइल बनाएं.
सब-एचएएल लाइब्रेरी बनाने के लिए,
Android.bpएंट्री का उदाहरण देखने के लिए,hardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bpदेखें.manifest.xmlफ़ाइल से सभीandroid.hardware.sensorsएंट्री हटाएं. इस फ़ाइल में, डिवाइस पर काम करने वाले एचएएल की सूची होती है.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.0SubHalइंटरफ़ेस से मिलेIHalProxyCallbackके बजाय, एक नयाIHalProxyCallbackपास करता है- सब-एचएएल को
getSensorsListऔरinjectSensorDataके बजायgetSensorsList_2_1औरinjectSensorData_2_1लागू करने चाहिए, क्योंकि ये तरीकेISensors.halस्पेसिफ़िकेशन के वर्शन 2.1 में जोड़े गए नए टाइप का इस्तेमाल करते हैं. - मल्टी-एचएएल को सब-एचएएल को वर्शन 2.1 के सब-एचएएल के तौर पर इस्तेमाल करने के लिए,
sensorsHalGetSubHal_2_1के बजायsensorsHalGetSubHalको दिखाना होगा.
सेंसर एचएएल 2.0 से पोर्ट किया गया
Sensors HAL 2.0 से Sensors Multi-HAL 2.0 पर अपग्रेड करते समय, पक्का करें कि एचएएल लागू करने से जुड़ी ये ज़रूरी शर्तें पूरी होती हों.
HAL शुरू करना
Sensors HAL 2.0 में एक initialize फ़ंक्शन होता है. इससे सेंसर सेवा, FMQ और डाइनैमिक सेंसर कॉलबैक पास कर सकती है. Sensors Multi-HAL 2.0 में, initialize() फ़ंक्शन एक ही कॉलबैक पास करता है. इसका इस्तेमाल सेंसर इवेंट पोस्ट करने, वेक लॉक पाने, और डाइनैमिक सेंसर कनेक्शन और डिसकनेक्शन के बारे में सूचना देने के लिए किया जाना चाहिए.
सेंसर से जुड़े इवेंट को Multi-HAL पर पोस्ट करना
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() से मिली वैल्यू बदल सकती है.
सेंसर से जुड़े इवेंट को Multi-HAL पर पोस्ट करना
Sensors HAL 2.0 में, poll()के कॉल किए जाने का इंतज़ार करने के बजाय, सब-HAL को सेंसर इवेंट उपलब्ध होने पर, IHalProxyCallback में सेंसर इवेंट को तुरंत लिखना होगा.
WAKE_UP इवेंट
सेंसर 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 से पोर्ट करने के लिए, यह तरीका अपनाएं.
- पक्का करें कि सेंसर HAL कॉन्फ़िगरेशन,
/vendor/etc/sensors/hals.confपर मौजूद हो. इसके लिए,/system/etc/sensors/hals.confपर मौजूद फ़ाइल को दूसरी जगह ले जाना पड़ सकता है. hardware/hardware.hऔरhardware/sensors.hके सभी रेफ़रंस हटाएं, क्योंकि ये HAL 2.0 के लिए काम नहीं करते.- Sensors Hal 1.0 से पोर्ट करना में बताए गए तरीके से, सब-एचएएल पोर्ट करें.
- Sensors Multi-HAL 2.0 लागू करना सेक्शन में दिए गए तीसरे और चौथे चरण को पूरा करके, Sensors Multi-HAL 2.0 को डेज़िग्नेटेड एचएएल के तौर पर सेट करें.
सत्यापन
वीटीएस चलाएं
जब आपने एक या उससे ज़्यादा सब-HAL को Sensors Multi-Hal 2.1 के साथ इंटिग्रेट किया हो, तो Vendor Test Suite (VTS) का इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि आपके सब-HAL, 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/testsatest
फ़र्ज़ी सब-एचएएल के साथ टेस्ट करना
फ़र्ज़ी सब-एचएएल, ISensorsSubHal इंटरफ़ेस के डमी वर्शन होते हैं.
सब-एचएएल, सेंसर की अलग-अलग सूचियां दिखाते हैं. सेंसर चालू होने पर, वे HalProxy को अपने-आप जनरेट होने वाले सेंसर इवेंट समय-समय पर पोस्ट करते हैं. ऐसा, सेंसर के किसी अनुरोध में तय किए गए इंटरवल के आधार पर होता है.
फ़र्ज़ी सब-एचएएल का इस्तेमाल यह जांचने के लिए किया जा सकता है कि सिस्टम में लोड किए गए अन्य सब-एचएएल के साथ, पूरा मल्टी-एचएएल कोड कैसे काम करता है. साथ ही, इसका इस्तेमाल Sensors Multi-HAL कोड के अलग-अलग पहलुओं पर ज़ोर देने के लिए भी किया जा सकता है.
दो फ़र्ज़ी सब-एचएएल, hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/ पर उपलब्ध हैं.
फ़र्ज़ी सब-एचएएल बनाने और उन्हें किसी डिवाइस पर पुश करने के लिए, यह तरीका अपनाएं:
डिवाइस पर तीन अलग-अलग फ़र्ज़ी सब-एचएएल बनाने और उन्हें पुश करने के लिए, ये कमांड चलाएं:
$ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests/mmaadb 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.soadb 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.soadb 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/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.soHalProxyको फिर से शुरू करें और कॉन्फ़िगरेशन में दिए गए नए सब-एचएएल लोड करें.adb shell stopadb shell start
डीबग करना
डेवलपर, lshal कमांड का इस्तेमाल करके फ़्रेमवर्क को डीबग कर सकते हैं. Sensors HAL के डीबग आउटपुट का अनुरोध करने के लिए, यह कमांड चलाएं:
adb rootadb 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 की डीबग करने की विधि को पास किया गया फ़ाइल डिस्क्रिप्टर, हर सब-एचएएल को पास किया जाता है. इसलिए, डेवलपर को HalProxy इंटरफ़ेस के हिस्से के तौर पर डीबग करने की विधि लागू करनी होगी.ISensorsSubHal