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