सेंसर मल्टी-एचएएल एक ढांचा है जो सेंसर एचएएल को अन्य सेंसर एचएएल के साथ चलने की अनुमति देता है। सेंसर मल्टी-एचएएल विक्रेता विभाजन पर गतिशील लाइब्रेरी के रूप में संग्रहीत सेंसर उप-एचएएल को गतिशील रूप से लोड करता है और उन्हें एक कॉलबैक ऑब्जेक्ट देता है जो घटनाओं को पोस्ट करने और वेक लॉक को प्राप्त करने और जारी करने को संभाल सकता है। सेंसर सब-एचएएल एक सेंसर एचएएल है जो विक्रेता विभाजन पर एक साझा ऑब्जेक्ट में बनाया गया है और मल्टी-एचएएल ढांचे द्वारा उपयोग किया जाता है। ये उप-एचएएल एक-दूसरे पर या बहु-एचएएल कोड पर निर्भर नहीं होते हैं जिनमें प्रक्रिया के लिए मुख्य कार्य शामिल होता है।
सेंसर मल्टी-एचएएल 2.1, जो एंड्रॉइड 11 या उच्चतर पर चलने वाले उपकरणों पर उपलब्ध है, सेंसर मल्टी-एचएएल 2.0 का एक पुनरावृत्ति है जो उप-एचएएल को लोड करने का समर्थन करता है जो हिंज कोण सेंसर प्रकार को उजागर कर सकता है। इस सेंसर प्रकार का समर्थन करने के लिए, सब-एचएएल को 2.1 सबहाल हेडर में परिभाषित सब-एचएएल एपीआई का उपयोग करना होगा।
एंड्रॉइड 13 या उच्चतर चलाने वाले उपकरणों के लिए जो सेंसर एआईडीएल एचएएल का उपयोग करते हैं, आप मल्टी-एचएएल क्षमता की अनुमति देने के लिए मल्टी-एचएएल शिम परत का उपयोग कर सकते हैं। कार्यान्वयन विवरण के लिए, सेंसर एआईडीएल एचएएल के साथ सेंसर मल्टी-एचएएल का उपयोग करना देखें।
सेंसर मल्टी-एचएएल 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
ऑब्जेक्ट को सेंसर्स मल्टी-HAL द्वारा इंस्टेंटिएट किया जाता है और सब-HALs से सेंसर फ्रेमवर्क तक डेटा को पास करने का काम संभालता है। -
HalProxy.cpp
:HalProxy
के कार्यान्वयन में उप-HALs और सेंसर ढांचे के बीच मल्टीप्लेक्स संचार के लिए आवश्यक सभी तर्क शामिल हैं। SubHal.h
:ISensorsSubHal
इंटरफ़ेस उस इंटरफ़ेस को परिभाषित करता है जिसका उप-HAL को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/
: यह उदाहरण उप-HAL कार्यान्वयन नकली डेटा उत्पन्न करने के लिए नकली सेंसर का उपयोग करता है। यह परीक्षण करने के लिए उपयोगी है कि एक डिवाइस पर एकाधिक उप-एचएएल कैसे इंटरैक्ट करते हैं।
कार्यान्वयन
यह अनुभाग वर्णन करता है कि निम्नलिखित स्थितियों में सेंसर्स मल्टी-एचएएल को कैसे लागू किया जाए:
- सेंसर एआईडीएल एचएएल के साथ सेंसर मल्टी-एचएएल का उपयोग करना
- सेंसर मल्टी-एचएएल 2.1 का कार्यान्वयन
- सेंसर्स मल्टी-एचएएल 2.0 से मल्टी-एचएएल 2.1 में पोर्टिंग
- सेंसर एचएएल 2.0 से पोर्टिंग
- सेंसर एचएएल 1.0 से पोर्टिंग
- सेंसर्स मल्टी-एचएएल 1.0 से पोर्टिंग
सेंसर्स AIDL HAL के साथ सेंसर्स मल्टी-HAL का उपयोग करें
सेंसर एआईडीएल एचएएल के साथ मल्टी-एचएएल क्षमता की अनुमति देने के लिए, एआईडीएल मल्टी-एचएएल शिम लेयर मॉड्यूल आयात करें, जो हार्डवेयर/इंटरफेस/सेंसर/एआईडीएल/डिफॉल्ट/मल्टीहाल/ में पाया जाता है। मॉड्यूल एआईडीएल और एचआईडीएल सेंसर एचएएल परिभाषा प्रकारों के बीच रूपांतरण को संभालता है और कार्यान्वयन सेंसर मल्टी-एचएएल 2.1 में वर्णित मल्टी-एचएएल इंटरफ़ेस के चारों ओर एक रैपर को परिभाषित करता है। एआईडीएल मल्टी-एचएएल शिम परत उन उपकरणों के साथ संगत है जो सेंसर मल्टी-एचएएल 2.1 को लागू करते हैं।
एआईडीएल मल्टी-एचएएल शिम परत आपको सेंसर एआईडीएल एचएएल में हेड ट्रैकर और सीमित-अक्ष आईएमयू सेंसर प्रकारों को उजागर करने की अनुमति देती है। AIDL HAL इंटरफ़ेस द्वारा परिभाषित इन सेंसर प्रकारों का उपयोग करने के लिए, getSensorsList_2_1()
कार्यान्वयन में SensorInfo
संरचना में type
फ़ील्ड सेट करें। यह सुरक्षित है क्योंकि एआईडीएल और एचआईडीएल सेंसर एचएएल के पूर्णांक-समर्थित सेंसर प्रकार फ़ील्ड ओवरलैप नहीं होते हैं।
सेंसर मल्टी-एचएएल 2.1 लागू करें
किसी नए डिवाइस पर सेंसर्स मल्टी-एचएएल 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
प्रविष्टियाँ हटाएँ, जिसमें डिवाइस पर समर्थित HAL की सूची शामिल है।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
प्रारंभ होता है, नए कार्यान्वित उप-HAL की तलाश करता है, और sensorsHalGetSubHal_2_1
पर कॉल करके इसे प्रारंभ करता है।
सेंसर्स मल्टी-एचएएल 2.0 से मल्टी-एचएएल 2.1 तक पोर्ट
मल्टी-एचएएल 2.0 से मल्टी-एचएएल 2.1 में पोर्ट करने के लिए, SubHal
इंटरफ़ेस लागू करें और अपने सब-एचएएल को पुन: संकलित करें।
2.0 और 2.1 SubHal
इंटरफ़ेस के बीच ये अंतर हैं:
-
IHalProxyCallback
ISensors.hal
विनिर्देश के संस्करण 2.1 में बनाए गए प्रकारों का उपयोग करता है। -
initialize()
फ़ंक्शन 2.0SubHal
इंटरफ़ेस के बजाय एक नयाIHalProxyCallback
पास करता है - उप-एचएएल को
getSensorsList_2_1
औरinjectSensorData
के बजायgetSensorsList
औरinjectSensorData_2_1
को लागू करना होगा क्योंकि ये विधियांISensors.hal
विनिर्देश के संस्करण 2.1 में जोड़े गए नए प्रकारों का उपयोग करती हैं। - उप-HAL को मल्टी-HAL के लिए
sensorsHalGetSubHal_2_1
HalGetSubHal_2_1 के बजायsensorsHalGetSubHal
उजागर करना होगा ताकि उन्हें संस्करण 2.1 उप-HALs के रूप में माना जा सके।
सेंसर एचएएल 2.0 से पोर्ट
सेंसर्स एचएएल 2.0 से सेंसर्स मल्टी-एचएएल 2.0 में अपग्रेड करते समय, सुनिश्चित करें कि एचएएल कार्यान्वयन निम्नलिखित आवश्यकताओं को पूरा करता है।
एचएएल को प्रारंभ करें
सेंसर एचएएल 2.0 में एक इनिशियलाइज़ फ़ंक्शन है जो सेंसर सेवा को एफएमक्यू और एक गतिशील सेंसर कॉलबैक पास करने की अनुमति देता है। सेंसर मल्टी-एचएएल 2.0 में, initialize()
फ़ंक्शन एक एकल कॉलबैक पास करता है जिसका उपयोग सेंसर घटनाओं को पोस्ट करने, वेक लॉक प्राप्त करने और गतिशील सेंसर कनेक्शन और डिस्कनेक्शन की सूचना देने के लिए किया जाना चाहिए।
मल्टी-एचएएल कार्यान्वयन के लिए सेंसर इवेंट पोस्ट करें
एफएमक्यू के माध्यम से सेंसर इवेंट पोस्ट करने के बजाय, सेंसर इवेंट उपलब्ध होने पर उप-एचएएल को सेंसर इवेंट को IHalProxyCallback
पर लिखना होगा।
WAKE_UP घटनाएँ
सेंसर्स एचएएल 2.0 में, एचएएल इसके कार्यान्वयन के लिए वेक लॉक का प्रबंधन कर सकता है। सेंसर मल्टी-एचएएल 2.0 में, उप-एचएएल मल्टी-एचएएल कार्यान्वयन को वेक लॉक प्रबंधित करने की अनुमति देता है और createScopedWakelock
को लागू करके वेक लॉक प्राप्त करने का अनुरोध कर सकता है। मल्टी-एचएएल कार्यान्वयन के लिए वेक अप इवेंट पोस्ट करते समय एक लॉक किए गए स्कोप्ड वेक लॉक को हासिल किया जाना चाहिए और postEvents
को पास किया जाना चाहिए।
गतिशील सेंसर
सेंसर मल्टी-एचएएल 2.0 के लिए आवश्यक है कि जब भी डायनेमिक सेंसर कनेक्शन बदलते हैं तो IHalProxyCallback
में onDynamicSensorsConnected
और onDynamicSensorsDisconnected
को कॉल किया जाए। ये कॉलबैक IHalProxyCallback
पॉइंटर के भाग के रूप में उपलब्ध हैं जो initialize()
फ़ंक्शन के माध्यम से प्रदान किया जाता है।
सेंसर एचएएल 1.0 से पोर्ट
सेंसर्स एचएएल 1.0 से सेंसर्स मल्टी-एचएएल 2.0 में अपग्रेड करते समय, सुनिश्चित करें कि एचएएल कार्यान्वयन निम्नलिखित आवश्यकताओं को पूरा करता है।
एचएएल को प्रारंभ करें
सब-एचएएल और मल्टी-एचएएल कार्यान्वयन के बीच कॉलबैक स्थापित करने के लिए initialize()
फ़ंक्शन का समर्थन किया जाना चाहिए।
उपलब्ध सेंसरों को उजागर करें
सेंसर मल्टी-एचएएल 2.0 में, getSensorsList()
फ़ंक्शन को एकल डिवाइस बूट के दौरान समान मान लौटाना होगा, यहां तक कि सेंसर एचएएल पुनरारंभ होने पर भी। यदि सिस्टम सर्वर पुनरारंभ होता है तो यह फ्रेमवर्क को सेंसर कनेक्शन को फिर से स्थापित करने का प्रयास करने की अनुमति देता है। डिवाइस के रीबूट करने के बाद getSensorsList()
द्वारा लौटाया गया मान बदल सकता है।
मल्टी-एचएएल कार्यान्वयन के लिए सेंसर इवेंट पोस्ट करें
सेंसर एचएएल 2.0 में, poll()
कॉल किए जाने की प्रतीक्षा करने के बजाय, जब भी सेंसर इवेंट उपलब्ध हों, उप-एचएएल को सक्रिय रूप से सेंसर इवेंट को IHalProxyCallback
पर लिखना होगा।
WAKE_UP घटनाएँ
सेंसर्स एचएएल 1.0 में, एचएएल इसके कार्यान्वयन के लिए वेक लॉक का प्रबंधन कर सकता है। सेंसर मल्टी-एचएएल 2.0 में, उप-एचएएल मल्टी-एचएएल कार्यान्वयन को वेक लॉक प्रबंधित करने की अनुमति देता है और createScopedWakelock
को लागू करके वेक लॉक प्राप्त करने का अनुरोध कर सकता है। मल्टी-एचएएल कार्यान्वयन के लिए वेक अप इवेंट पोस्ट करते समय एक लॉक किए गए स्कोप्ड वेक लॉक को हासिल किया जाना चाहिए और postEvents
को पास किया जाना चाहिए।
गतिशील सेंसर
सेंसर्स एचएएल 1.0 में, डायनेमिक सेंसर्स poll()
फ़ंक्शन के माध्यम से लौटाए जाते हैं। सेंसर मल्टी-एचएएल 2.0 के लिए आवश्यक है कि जब भी डायनेमिक सेंसर कनेक्शन बदलते हैं तो IHalProxyCallback
में onDynamicSensorsConnected
और onDynamicSensorsDisconnected
को कॉल किया जाए। ये कॉलबैक IHalProxyCallback
पॉइंटर के भाग के रूप में उपलब्ध हैं जो initialize()
फ़ंक्शन के माध्यम से प्रदान किया जाता है।
सेंसर्स मल्टी-एचएएल 1.0 से पोर्ट
सेंसर्स मल्टी-एचएएल 1.0 से मौजूदा कार्यान्वयन को पोर्ट करने के लिए, इन चरणों का पालन करें।
- सुनिश्चित करें कि सेंसर HAL कॉन्फिगरेशन
/vendor/etc/sensors/hals.conf.
इसमें/system/etc/sensors/hals.conf
पर स्थित फ़ाइल को स्थानांतरित करना शामिल हो सकता है। -
hardware/hardware.h
औरhardware/sensors.h
का कोई भी संदर्भ हटा दें क्योंकि ये एचएएल 2.0 के लिए समर्थित नहीं हैं। - पोर्ट सब-एचएएल जैसा कि सेंसर्स हैल 1.0 से पोर्टिंग में वर्णित है।
- इम्प्लीमेंटिंग सेंसर्स म्यूटली-एचएएल 2.0 अनुभाग में चरण 3 और 4 का पालन करके सेंसर्स मल्टी-एचएएल 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 मल्टी-HAL शिम लेयर चला रहे हैं, तो 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
कमांड का उपयोग करके फ्रेमवर्क को डीबग कर सकते हैं। सेंसर्स 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
के लिए निर्दिष्ट संख्या एक बड़ी संख्या (1000 या अधिक) है, तो यह इंगित करता है कि सेंसर ढांचे में लिखे जाने के लिए कई घटनाएं लंबित हैं। यह इंगित करता है कि सेंसर सेवा गतिरोध में है या क्रैश हो गई है और सेंसर घटनाओं को संसाधित नहीं कर रही है, या सेंसर घटनाओं का एक बड़ा बैच हाल ही में उप-एचएएल से पोस्ट किया गया था।
यदि वेक लॉक रेफरी गिनती 0
से अधिक है, तो इसका मतलब है कि HalProxy
ने वेक लॉक हासिल कर लिया है। यह केवल 0
से अधिक होना चाहिए यदि ScopedWakelock
जानबूझकर आयोजित किया जा रहा है या यदि वेकअप इवेंट HalProxy
को भेजे गए थे और सेंसर फ्रेमवर्क द्वारा संसाधित नहीं किए गए हैं।
HalProxy
की डिबग विधि को पास किया गया फ़ाइल डिस्क्रिप्टर प्रत्येक उप-एचएएल को पास किया जाता है, इसलिए डेवलपर्स को डिबग विधि को ISensorsSubHal
इंटरफ़ेस के हिस्से के रूप में लागू करना होगा।