सेंसर मल्टी-एचएएल एक फ़्रेमवर्क है, जिसकी मदद से सेंसर एचएएल, अन्य सेंसर एचएएल के साथ काम कर सकते हैं. सेंसर मल्टी-एचएएल, वेंडर पार्टीशन पर डाइनैमिक लाइब्रेरी के तौर पर सेव किए गए सेंसर सब-एचएएल को डाइनैमिक तौर पर लोड करता है. साथ ही, उन्हें एक कॉलबैक ऑब्जेक्ट देता है, जो इवेंट पोस्ट करने और वेक लॉक को हासिल करने और रिलीज़ करने की सुविधा देता है. सेंसर सब-एचएएल, सेंसर एचएएल होता है. इसे वेंडर के partition पर शेयर किए गए ऑब्जेक्ट में बनाया जाता है. इसका इस्तेमाल, मल्टी-एचएएल फ़्रेमवर्क करता है. ये सब-एचएएल, एक-दूसरे या उस मल्टी-एचएएल कोड पर निर्भर नहीं होते जिसमें प्रोसेस के लिए मुख्य फ़ंक्शन होता है.
Android 11 या उसके बाद के वर्शन चलाने वाले डिवाइसों पर उपलब्ध, मल्टी-HAL 2.1 सेंसर, सेंसर मल्टी-HAL 2.0 का एक इटरेशन है. यह ऐसे सब-एचएएल को लोड करने की सुविधा देता है जो हिंज ऐंगल सेंसर टाइप को दिखा सकते हैं. यह सेंसर टाइप काम कर सके, इसके लिए सब-एचएएल को उन सब-एचएएल एपीआई का इस्तेमाल करना होगा जिनके बारे में 2.1 SubHal हेडर में बताया गया है.
Android 13 या इसके बाद के वर्शन पर चलने वाले उन डिवाइसों के लिए जिनमें Sensors AIDL HAL का इस्तेमाल किया जाता है, कई एचएएल की सुविधा चालू करने के लिए, कई एचएएल वाली शिम लेयर का इस्तेमाल किया जा सकता है. लागू करने के बारे में जानकारी के लिए, Sensors AIDL HAL के साथ Sensors Multi-HAL का इस्तेमाल करना देखें.
सेंसर मल्टी-एचएएल 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
) इंटरफ़ेस से इन तरीकों से अलग है:
- initialize का तरीका, दो एफ़एमक्यू और
ISensorsCallback
के बजायIHalProxyCallback
क्लास को पास करता है. - सब-एचएएल को गड़बड़ी की रिपोर्ट में डीबग करने से जुड़ी जानकारी देने के लिए, डीबग फ़ंक्शन लागू करना होगा.
- सब-एचएएल को एक नाम फ़ंक्शन लागू करना होगा, ताकि लोड किए गए सब-एचएएल को दूसरे सब-एचएएल से अलग किया जा सके.
Sensors Multi-HAL 2 और Sensors HAL 2 के बीच मुख्य अंतर, शुरू करने वाले फ़ंक्शन में है. एफ़एमक्यू उपलब्ध कराने के बजाय, IHalProxyCallback
इंटरफ़ेस में दो तरीके होते हैं. पहला तरीका, सेंसर फ़्रेमवर्क में सेंसर इवेंट पोस्ट करने के लिए और दूसरा वेक लॉक सेट करने का तरीका. Sensors Multi-HAL, FMQs के साथ सभी इंटरैक्शन को मैनेज करता है, ताकि सभी सब-एचएएल के लिए सेंसर इवेंट की समय पर डिलीवरी हो सके. हमारा सुझाव है कि सब-एचएएल, 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
के लिए किया जा सके.मल्टी-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 का इस्तेमाल करना
- Sensors Multi-HAL 2.1 लागू करना
- Sensors Multi-HAL 2.0 से Multi-HAL 2.1 पर पोर्ट करना
- सेंसर के HAL 2.0 से पोर्ट करना
- Sensors HAL 1.0 से पोर्ट करना
- सेंसर मल्टी-एचएएल 1.0 से पोर्ट करना
सेंसर एआईडीएल एचएएल के साथ सेंसर मल्टी-एचएएल का इस्तेमाल करें
सेंसर के लिए AIDL HAL के साथ मल्टी-एचएएल की सुविधा इस्तेमाल करने के लिए, AIDL मल्टी-एचएएल शिम लेयर मॉड्यूल इंपोर्ट करें. यह hardware/interfaces/sensors/aidl/default/multihal/ में मौजूद होता है. यह मॉड्यूल एआईडीएल और HIDL सेंसर एचएएल डेफ़िनिशन टाइप के बीच कन्वर्ज़न को हैंडल करता है. साथ ही, यह सेंसर मल्टी-एचएएल 2.1 को लागू करना में बताए गए मल्टी-एचएएल इंटरफ़ेस के आस-पास एक रैपर तय करता है. AIDL मल्टी-HAL शिम लेयर, सेंसर मल्टी-HAL 2.1 को लागू करने वाले डिवाइसों के साथ काम करता है.
AIDL मल्टी-एचएएल शिम लेयर की मदद से, सेंसर एआईडीएल एचएएल में हेड ट्रैकर और सीमित ऐक्सिस वाले IMU सेंसर टाइप को दिखाया जा सकता है. AIDL HAL इंटरफ़ेस के ज़रिए तय किए गए इन सेंसर टाइप का इस्तेमाल करने के लिए, getSensorsList_2_1()
लागू करने के दौरान SensorInfo
स्ट्रक्चर में type
फ़ील्ड सेट करें. ऐसा करना सुरक्षित है, क्योंकि AIDL और HIDL सेंसर HAL के पूर्णांक वाले सेंसर टाइप फ़ील्ड ओवरलैप नहीं होते.
Sensors Multi-HAL 2.1 लागू करना
किसी नए डिवाइस पर Sensors Multi-HAL 2.1 लागू करने के लिए, यह तरीका अपनाएं:
ISensorsSubHal
इंटरफ़ेस को लागू करने का तरीकाSubHal.h
में बताया गया है.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
इंटरफ़ेस लागू करें और अपने सब-HAL को फिर से कंपाइल करें.
SubHal
के 2.0 और 2.1 इंटरफ़ेस के बीच के अंतर यहां दिए गए हैं:
IHalProxyCallback
में,ISensors.hal
स्पेसिफ़िकेशन के 2.1 वर्शन में बनाए गए टाइप इस्तेमाल किए जाते हैं.initialize()
फ़ंक्शन, 2.0SubHal
इंटरफ़ेस से लिए गए इंटरफ़ेस के बजाय, एक नयाIHalProxyCallback
पास करता है- सब-एचएएल को
getSensorsList
औरinjectSensorData
के बजाय,getSensorsList_2_1
औरinjectSensorData_2_1
को लागू करना होगा. ऐसा इसलिए, क्योंकि ये तरीकेISensors.hal
स्पेसिफ़िकेशन के वर्शन 2.1 में जोड़े गए नए टाइप का इस्तेमाल करते हैं. - सब-एचएएल को मल्टी-एचएएल के लिए,
sensorsHalGetSubHal
के बजायsensorsHalGetSubHal_2_1
को दिखाना चाहिए, ताकि उन्हें वर्शन 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 इवेंट
Sensors HAL 2.0 में, HAL, वॉकी-अप लॉक को लागू करने के लिए उसे मैनेज कर सकता है. Sensor Multi-HAL 2.0 में, सब-एचएएल की मदद से, मल्टी-एचएएल को वेक लॉक मैनेज करने की अनुमति मिलती है. साथ ही, createScopedWakelock
को ट्रिगर करके, वेक लॉक पाने का अनुरोध किया जा सकता है.
मल्टी-एचएएल लागू करने के इवेंट में, स्क्रीन चालू करने के इवेंट को पोस्ट करते समय, लॉक किए गए स्कोप वाले वेक लॉक को हासिल करना और postEvents
को पास करना ज़रूरी है.
डाइनैमिक सेंसर
मल्टी-एचएएल 2.0 सेंसर के लिए यह ज़रूरी है कि डाइनैमिक सेंसर के कनेक्शन बदलने पर, IHalProxyCallback
में मौजूद onDynamicSensorsConnected
और onDynamicSensorsDisconnected
को कॉल किया जाए. ये कॉलबैक,
initialize()
फ़ंक्शन से दिए जाने वाले IHalProxyCallback
पॉइंटर के हिस्से के तौर पर उपलब्ध होते हैं.
Sensors HAL 1.0 से पोर्ट किया गया
सेंसर एचएएल 1.0 से सेंसर मल्टी-एचएएल 2.0 में अपग्रेड करते समय, पक्का करें कि एचएएल लागू करना इन ज़रूरी शर्तों को पूरा करता हो.
HAL को शुरू करना
सब-एचएएल और मल्टी-एचएएल के बीच कॉलबैक सेट अप करने के लिए, initialize()
फ़ंक्शन का इस्तेमाल किया जाना चाहिए.
उपलब्ध सेंसर दिखाना
Sensors Multi-HAL 2.0 में, getSensorsList()
फ़ंक्शन को किसी डिवाइस के बूट होने के दौरान एक ही वैल्यू दिखानी चाहिए. ऐसा तब भी होना चाहिए, जब सेंसर HAL को रीस्टार्ट किया गया हो. इससे, सिस्टम सर्वर के रीस्टार्ट होने पर, फ़्रेमवर्क सेंसर कनेक्शन फिर से करने की कोशिश कर पाता है. getSensorsList()
से मिलने वाली वैल्यू, डिवाइस को फिर से चालू करने के बाद बदल सकती है.
मल्टी-एचएएल लागू करने के लिए, सेंसर इवेंट पोस्ट करना
Sensors HAL 2.0 में, poll()
को कॉल किए जाने का इंतज़ार करने के बजाय, सब-HAL को सेंसर इवेंट उपलब्ध होने पर, IHalProxyCallback
में सेंसर इवेंट को पहले से लिखना होगा.
WAKE_UP इवेंट
Sensors HAL 1.0 में, HAL अपने लागू होने के लिए वेक लॉक को मैनेज कर सकता है. सेंसर मल्टी-एचएएल 2.0 में, सब-एचएएल, मल्टी-एचएएल को लागू करने की अनुमति देते हैं. इससे वेक लॉक को मैनेज किया जा सकता है. साथ ही, createScopedWakelock
को चालू करके, वेक लॉक का अनुरोध किया जा सकता है.
मल्टी-एचएएल लागू करने के लिए, 'जागने की सुविधा' वाले इवेंट पोस्ट करते समय, लॉक किए गए स्कोप वाला वेक लॉक हासिल करना और postEvents
को पास करना ज़रूरी है.
डाइनैमिक सेंसर
सेंसर HAL 1.0 में, poll()
फ़ंक्शन की मदद से डाइनैमिक सेंसर दिखाए जाते हैं.
Sensors Multi-HAL 2.0 के लिए ज़रूरी है कि जब भी सेंसर के डाइनैमिक कनेक्शन बदलें, तो IHalProxyCallback
में onDynamicSensorsConnected
और onDynamicSensorsDisconnected
को कॉल किया जाए. ये कॉलबैक,
initialize()
फ़ंक्शन से दिए जाने वाले IHalProxyCallback
पॉइंटर के हिस्से के तौर पर उपलब्ध होते हैं.
सेंसर मल्टी-एचएएल 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 से पोर्ट करना में बताए गए तरीके से सब-एचएएल पोर्ट करें.
- सेंसर मल्टी-एचएएल 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
अगर आपने 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/
पर उपलब्ध हैं.
नकली सब-एचएएल बनाने और उन्हें किसी डिवाइस में पुश करने के लिए, यह तरीका अपनाएं:
तीन अलग-अलग नकली सब-एचएएल बनाने और डिवाइस में पुश करने के लिए, ये कमांड चलाएं:
$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
/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
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
ऑब्जेक्ट और नकली सब-एचएएल के लिए, निर्देश के आउटपुट का उदाहरण दिया गया है.
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
इंटरफ़ेस के हिस्से के तौर पर, डीबग करने के तरीके को लागू करना होगा.