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