Sensors Multi-HAL هو إطار عمل يسمح بتشغيل واجهات HAL لأجهزة الاستشعار مع واجهات HAL أخرى لأجهزة الاستشعار. تُحمّل أجهزة الاستشعار Multi-HAL بشكل ديناميكي بروتوكولات HALs الفرعية التي تم تخزينها كمكتبات ديناميكية على قسم المورِّد وتمنحها كائن استدعاء لمعالجة أحداث النشر واكتساب قفل التنشيط وإطلاقه. واجهة HAL الفرعية لأجهزة الاستشعار هي واجهة HAL لأجهزة الاستشعار تم إنشاؤها في عنصر مشترَك على ملف "قسم المورّد" ويستخدمها إطار عمل HAL المتعدّد. لا تعتمد وحدات HAL الفرعية هذه على بعضها البعض أو على رمز HAL المتعدّد الذي يحتوي على الدالة الرئيسية للعملية.
إنّ أجهزة الاستشعار Multi-HAL 2.1 المتاحة على الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث هي عبارة عن تكرار لأجهزة الاستشعار Multi-HAL 2.0 التي تتيح تحميل الكائنات الفرعية (HAL) التي يمكنها إظهار نوع جهاز الاستشعار زاوية المفصّلة. لإتاحة هذا النوع من أدوات الاستشعار، يجب أن تستخدم قنوات HAL الفرعية واجهات برمجة تطبيقات HAL الفرعية المحدّدة في العنوان 2.1 SubHal.
بالنسبة إلى الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث والتي تستخدم أجهزة الاستشعار AIDL HAL، يمكنك استخدام طبقة رقائق متعددة الألوان (HAL) للسماح بإمكانية بروتوكول HAL المتعدد. لمعرفة تفاصيل التنفيذ، يُرجى قراءة مقالة استخدام حزمة HAL متعددة لأجهزة الاستشعار مع حزمة HAL لأجهزة الاستشعار المستندة إلى واجهة برمجة التطبيقات (AIDL).
الفرق بين Sensors Multi-HAL 2 وSensors HAL 2
تتوفر أجهزة الاستشعار Multi-HAL 2 على الأجهزة التي تعمل بنظام التشغيل Android 10 أو الإصدارات الأحدث،
وهي تقدّم تجريدات متعددة في أعلى Sensors Multi-HAL 2 لتسهيل التفاعل مع
واجهات برمجة تطبيقات HAL. تقدِّم أجهزة الاستشعار Multi-HAL 2 فئة
HalProxy
للتعامل مع تنفيذ واجهة HAL 2 لأجهزة الاستشعار وواجهة
V2_1/SubHal
(أو
V2_0/SubHal
)
للسماح لـ HalProxy
بالتفاعل مع الفلاتر الفرعية (HALs).
تختلف واجهة ISensorsSubHal
عن واجهة
2.1/ISensors.hal
(أو
2.0/ISensors.hal
)
بالطُرق التالية:
- تُمرِّر طريقة الإعداد فئة
IHalProxyCallback
بدلاً من فئتَي FMQ وISensorsCallback
. - يجب أن تنفّذ الحسابات الفرعية (HALs) وظيفة تصحيح الأخطاء لتوفير معلومات تصحيح الأخطاء في تقارير الأخطاء.
- يجب أن تنفذ HALs الفرعية دالة اسم حتى يمكن تمييز HALs الفرعية التي تم تحميلها عن غيرها من HALs الفرعية.
يتمثل الاختلاف الرئيسي بين أجهزة الاستشعار Multi-HAL 2 وأجهزة الاستشعار HAL 2 في
دوال التهيئة. بدلاً من توفير طلبات FMQ، توفّر واجهة IHalProxyCallback
طريقتَين، إحداهما لنشر أحداث أجهزة الاستشعار في إطار عمل
أجهزة الاستشعار وطريقة لإنشاء عمليات قفل الاستيقاظ. في التفاصيل، تدير أجهزة الاستشعار متعددة طبقة تجريد الأجهزة (HAL) جميع التفاعلات مع إطارات FMQ لضمان عرض أحداث أجهزة الاستشعار لجميع الكائنات الفرعية في HALs في الوقت المناسب. ننصح بشدة أن تستخدم "HALs" الفرعية طريقة
createScopedWakelock
لتفويض عبء قفل التنشيط إلى أجهزة الاستشعار Multi-HAL وضبط استخدام ميزة "قفل التنشيط" على قفل تنشيط واحد مشترك لجميع أجهزة الاستشعار المتعددة القنوات (HAL)، ما يقلّل من قفل المكالمات وفتح قفلها.
يتضمّن Sensors Multi-HAL 2 أيضًا بعض ميزات الأمان المدمجة. ويعالج
المواقف التي يكون فيها "الملفّ المؤقت للطلبات غير المُستجابة" الخاص بجهاز الاستشعار ممتلئًا أو عندما تتم إعادة تشغيل إطار عمل أجهزة الاستشعار في Android
وتحتاج إلى إعادة ضبط حالة جهاز الاستشعار. بالإضافة إلى ذلك، عندما يتم نشر الأحداث إلى الفئة HalProxy
ولكن يتعذّر على إطار عمل أداة الاستشعار قبول الأحداث على الفور، يمكن لأجهزة الاستشعار المتعددة القنوات (HAL) نقل الأحداث إلى سلسلة محادثات خلفية للسماح بمواصلة العمل على جميع الغرف الفرعية (HALs) أثناء انتظار نشر الأحداث.
تنفيذ رمز المصدر والمرجع
يتوفّر رمز All Sensors Multi-HAL في
hardware/interfaces/sensors/common/default/2.X/multihal/
.
في ما يلي إرشادات لبعض الموارد.
HalProxy.h
: يتم إنشاء مثيل للكائنHalProxy
بواسطة أجهزة استشعار متعدّدة لتفاعلات الهويات (HAL) ويعالج تمرير البيانات من الكائنات الفرعية المعالجة (HAL) إلى إطار عمل أداة الاستشعار.HalProxy.cpp
: يحتوي تنفيذHalProxy
على كل المنطق المطلوب للقيام بعمليات معالجة متعدّدة للتواصل بين واجهات HAL الفرعية وإطار عمل أداة الاستشعار.SubHal.h
: تحدِّد واجهةISensorsSubHal
الواجهة التي يجب أن يليها واجهة HAL الفرعية لتكون متوافقة معHalProxy
. تنفِّذ HAL الفرعية طريقة التهيئة بحيث يمكن استخدام الكائنHalProxyCallback
معpostEvents
وcreateScopedWakelock
.لاستخدام Multi-HAL 2.0، استخدِم الإصدار 2.0 من
SubHal.h
.hardware/interfaces/sensors/common/default/2.X/multihal/tests/
: تُحقّق اختبارات الوحدة هذه من تنفيذHalProxy
.hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/
: يستخدم هذا المثال لعملية تنفيذ HAL الفرعية أدوات استشعار وهمية لإنشاء بيانات مزيّفة. وهو مفيد لاختبار كيفية تفاعل عدة طبقات HALs على الجهاز.
التنفيذ
يوضّح هذا القسم كيفية تنفيذ حِزم HAL المتعددة لأجهزة الاستشعار في الحالات التالية:
- استخدام أجهزة الاستشعار المتعددة HAL مع معيار AIDL HAL لأجهزة الاستشعار
- تنفيذ Sensors Multi-HAL 2.1
- نقل البيانات من أجهزة الاستشعار Multi-HAL 2.0 إلى Multi-HAL 2.1
- نقل البيانات من Sensors HAL 2.0
- نقل البيانات من أجهزة الاستشعار HAL 1.0
- نقل البيانات من Sensors Multi-HAL 1.0
استخدام حزمة HAL متعددة لأجهزة الاستشعار مع حزمة HAL لأجهزة الاستشعار AIDL
للسماح بإمكانية استخدام واجهات HAL متعددة مع حزمة HAL لأجهزة الاستشعار من AIDL، استورِد وحدة طبقة الحشو لواجهة HAL متعددة من AIDL، والتي يمكن العثور عليها في hardware/interfaces/sensors/aidl/default/multihal/. تعالج الوحدة عملية التحويل بين نوعَي تعريف HAL لأجهزة الاستشعار AIDL وHIDL، وتحدِّد حزمة حول واجهة HAL المتعدّدة الموضّحة في مقالة تنفيذ حزمة HAL المتعدّدة لأجهزة الاستشعار 2.1. تتوافق طبقة رقاقة AIDL متعددة HAL مع الأجهزة التي تستخدم أجهزة الاستشعار Multi-HAL 2.1.
تسمح لك طبقة الحشو لواجهة HAL المتعدّدة في AIDL بعرض أداة تتبُّع الرأس وأنواع أدوات استشعار IMU ذات المحاور المحدودة في واجهة HAL لأجهزة الاستشعار في AIDL. لاستخدام أنواع أدوات الاستشعار هذه المحدّدة في واجهة AIDL HAL، يجب ضبط الحقل type
في
البنية SensorInfo
في تطبيق getSensorsList_2_1()
. وهذا الإجراء آمن
لأنّ حقول نوع أجهزة الاستشعار المستندة إلى الأعداد الصحيحة في HAL لأجهزة استشعار AIDL وHIDL
لا تتداخل.
تنفيذ أجهزة الاستشعار Multi-HAL 2.1
لتنفيذ أجهزة الاستشعار Multi-HAL 2.1 على جهاز جديد، يُرجى اتّباع الخطوات التالية:
- نفِّذ واجهة
ISensorsSubHal
كما هو موضّح فيSubHal.h
. - نفِّذ الطريقة
sensorsHalGetSubHal_2_1
فيSubHal.h
. أضِف استهداف
cc_library_shared
لإنشاء "HAL" فرعي تم تنفيذه حديثًا. عند إضافة الاستهداف:- تأكَّد من دفع القيمة المستهدَفة إلى مكان ما في قسم المورّد على الجهاز.
- في ملف الإعدادات الذي يقع في
/vendor/etc/sensors/hals.conf
، أضِف المسار إلى المكتبة في سطر جديد. إذا لزم الأمر، أنشئ ملفhals.conf
.
للحصول على مثال على إدخال
Android.bp
لإنشاء مكتبة فرعية لـ HAL، يُرجى الاطّلاع علىhardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bp
.أزِل جميع إدخالات
android.hardware.sensors
من ملفmanifest.xml
الذي يحتوي على قائمة HALs المتوافقة على الجهاز.أزِل جميع ملفات خدمة
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
بالبحث عن وحدة HAL الفرعية التي تم تنفيذها حديثًا ويُثبِّتها من خلال استدعاء sensorsHalGetSubHal_2_1
.
المنفذ من أجهزة الاستشعار Multi-HAL 2.0 إلى Multi-HAL 2.1
للانتقال من Multi-HAL 2.0 إلى Multi-HAL 2.1، نفِّذ واجهة
SubHal
وأعد تجميع HAL الفرعي.
في ما يلي الاختلافات بين واجهتَي SubHal
2.0 و2.1:
- تستخدم
IHalProxyCallback
الأنواع التي تم إنشاؤها في الإصدار 2.1 من مواصفاتISensors.hal
. - تُرسِل الدالة
initialize()
IHalProxyCallback
جديدًا بدلاً من العنصر من واجهةSubHal
2.0. - يجب أن تُطبِّق واجهات HAL الفرعية
getSensorsList_2_1
وinjectSensorData_2_1
بدلاً منgetSensorsList
وinjectSensorData
لأنّ هاتين الطريقتَين تستخدمان الأنواع الجديدة التي تمت إضافتها في الإصدار 2.1 من مواصفاتISensors.hal
. - يجب أن تعرض الحسابات الفرعية (HALs)
sensorsHalGetSubHal_2_1
بدلاً منsensorsHalGetSubHal
لكي يتم التعامل معها باعتبارها طبقات HAL المتعددة في الإصدار 2.1 من HALs.
منفذ من Sensors HAL 2.0
عند الترقية إلى Sensors Multi-HAL 2.0 من Sensors HAL 2.0، تأكَّد من أنّ تنفيذ HAL يستوفي المتطلبات التالية.
بدء HAL
يحتوي Sensors HAL 2.0 على دالة إعداد تسمح لخدمة الاستشعار بتمرير طلبات الحصول على البيانات من خلال تنسيق FMQ وإجراء استدعاء ديناميكي لجهاز الاستشعار. في أجهزة الاستشعار Multi-HAL 2.0،
تمرر الوظيفة initialize()
استدعاء فردي يجب استخدامه لإرسال أحداث أجهزة الاستشعار، والحصول على عمليات قفل التنشيط، وإرسال إشعار باتصال أداة الاستشعار الديناميكي
وقطع الاتصال.
نشر أحداث أداة الاستشعار في التنفيذ المتعدد المستويات (HAL)
بدلاً من نشر أحداث أداة الاستشعار من خلال FMQ، يجب أن تكتب HAL الفرعية أحداث المستشعر إلى IHalProxyCallback
عندما تتوفّر أحداث أجهزة الاستشعار.
أحداث WAKE_UP
في Sensors HAL 2.0، يمكن لواجهة HAL إدارة قفل الاستيقاظ لتنفيذه. في واجهة برمجة التطبيقات لخدمة Multi-HAL 2.0 لأجهزة الاستشعار، تسمح واجهات برمجة التطبيقات الفرعية لواجهة Multi-HAL بإدارة عمليات قفل التنشيط ويمكنها طلب الحصول على قفل تنشيط من خلال استدعاء createScopedWakelock
.
يجب الحصول على قفل تنشيط مقيّد النطاق ونقله إلى postEvents
عند
نشر أحداث التنشيط إلى تنفيذ Multi-HAL.
أجهزة الاستشعار الديناميكية
تتطلّب أجهزة الاستشعار Multi-HAL 2.0 أن يتم استدعاء onDynamicSensorsConnected
وonDynamicSensorsDisconnected
في
IHalProxyCallback
عند تغيير اتصالات أداة الاستشعار الديناميكية. تتوفّر عمليات الاستدعاء هذه
كجزء من مؤشر IHalProxyCallback
الذي يتم توفيره من خلال
الدالة initialize()
.
منفذ من أجهزة الاستشعار HAL 1.0
عند الترقية إلى أجهزة الاستشعار Multi-HAL 2.0 من Sensors HAL 1.0، تأكَّد من استيفاء تنفيذ HAL للمتطلبات التالية.
بدء HAL
يجب دعم الدالة initialize()
لإنشاء عملية الاستدعاء بين
HAL الفرعي وتنفيذ بروتوكول HAL المتعدد.
عرض أجهزة الاستشعار المتاحة
في أجهزة الاستشعار Multi-HAL 2.0، يجب أن تعرض الدالة getSensorsList()
القيمة نفسها أثناء تشغيل جهاز واحد، حتى في كل عمليات إعادة تشغيل طبقة تجريد الأجهزة (HAL) لأجهزة الاستشعار. ويسمح هذا لإطار العمل بمحاولة إعادة إنشاء اتصالات أداة الاستشعار في حال إعادة تشغيل خادم النظام. ويمكن أن تتغيّر القيمة التي يعرضها getSensorsList()
بعد إعادة تشغيل الجهاز.
نشر أحداث أداة الاستشعار في التنفيذ المتعدد المستويات (HAL)
أمّا في أجهزة الاستشعار HAL 2.0، فبدلاً من الانتظار حتى يتم طلب poll()
، يجب أن يكتب أعضاء أجهزة الاستشعار الفرعية
بشكل استباقي أحداث أداة الاستشعار إلى
IHalProxyCallback
كلما كانت أحداث أداة الاستشعار متاحة.
أحداث WAKE_UP
في أجهزة الاستشعار HAL 1.0، يمكن لـ HAL إدارة قفل التنشيط لتنفيذه. في أجهزة الاستشعار Multi-HAL 2.0، تسمح العمليات HALs الفرعية لتنفيذ طبقات HAL المتعددة
بإدارة عمليات قفل التنشيط ويمكن أن تطلب الحصول على قفل تنشيط من خلال استدعاء
createScopedWakelock
.
يجب الحصول على قفل تنشيط مُقفَل النطاق وتمريره إلى postEvents
عند
نشر أحداث التنشيط إلى تنفيذ بروتوكول HAL المتعدد.
أجهزة الاستشعار الديناميكية
في Sensors HAL 1.0، يتم عرض أجهزة الاستشعار الديناميكية من خلال الدالة poll()
.
تتطلّب أجهزة الاستشعار 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. - نقل واجهات HAL الفرعية كما هو موضّح في مقالة نقل البيانات من Sensors Hal 1.0
- اضبط Sensors Multi-HAL 2.0 على أنّه HAL المحدّد باتّباع الخطوتَين 3 و 4 في قسم تنفيذ Sensors Mutli-HAL 2.0.
التحقُّق
تشغيل نظام التحكّم في الفيديو
عند دمج حزمة HAL فرعية واحدة أو أكثر مع حزمة Sensors Multi-HAL 2.1، استخدِم مجموعة اختبار المورّد (VTS) للتأكّد من أنّ عمليات تنفيذ حزمة HAL الفرعية تستوفي جميع المتطلبات التي تحدّدها واجهة Sensors HAL.
لتشغيل اختبارات 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، شغِّل VtsAidlHalSensorsTargetTest
.
vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--primary-abi-only \
--skip-preconditions \
--module VtsAidlHalSensorsTargetTest
إجراء اختبارات الوحدة
تختبِر الوحدة في اختبار HalProxy_test.cpp
HalProxy
باستخدام فئات HAL فرعية وهمية يتم إنشاء مثيل لها في اختبار الوحدة ولا يتم تحميلها ديناميكيًا. عند إنشاء ملف HAL فرعي
جديد، يجب أن تكون هذه الاختبارات بمثابة دليل حول كيفية إضافة اختبارات وحدات تتحقق من تنفيذ ملف HAL الفرعي الجديد بشكل صحيح.
لتنفيذ الاختبارات، نفِّذ الأوامر التالية:
cd $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests
atest
الاختبار باستخدام فلاتر HAL الفرعية الزائفة
واجهات HAL الفرعية المزيّفة هي عمليات تنفيذ وهمية لواجهة ISensorsSubHal
.
تعرض واجهات HAL الفرعية قوائم مختلفة من أجهزة الاستشعار. عند تفعيل أجهزة الاستشعار،
تنشر هذه الأجهزة بشكل دوري أحداث أجهزة الاستشعار التي يتم إنشاؤها تلقائيًا على HalProxy
استنادًا إلى الفواصل الزمنية المحدّدة في طلب جهاز استشعار معيّن.
يمكن استخدام واجهات HAL الفرعية المزيّفة لاختبار كيفية عمل رمز Multi-HAL الكامل مع واجهات HAL الفرعية الأخرى المحمَّلة في النظام ولتأكيد جوانب مختلفة من رمز Sensors Multi-HAL.
يتوفّر اثنان من واجهات HAL الفرعية المزيّفة على الرابط
hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/
.
لإنشاء قنوات HALs فرعية مزيفة ودفعها إلى جهاز، اتخذ الخطوات التالية:
شغِّل الأوامر التالية لإنشاء حالات HALs فرعية وهمية مختلفة وإرسالها إلى الجهاز:
$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
عدِّل إعدادات HAL الخاصة بأجهزة الاستشعار في
/vendor/etc/sensors/hals.conf
باستخدام مسارات 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.so
أعِد تشغيل
HalProxy
وحمِّل حسابات HALs الفرعية الجديدة المدرَجة في الإعداد.adb shell stop
adb shell start
تصحيح الأخطاء
يمكن للمطوّرين تصحيح أخطاء إطار العمل باستخدام الأمر lshal
. لطلب إخراج تصحيح الأخطاء من طبقة تجريد الأجهزة (HAL) الخاصة بأجهزة الاستشعار، شغِّل الأمر التالي:
adb root
adb shell lshal debug android.hardware.sensors@2.1::ISensors/default
بعد ذلك، يتم إخراج المعلومات عن حالة HalProxy
وHALs الفرعية التابعة له إلى الوحدة الطرفية. في ما يلي مثال على نتيجة الأمر المتعلّق بعنصر
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
هو
رقم كبير (1000 أو أكثر)،
يشير ذلك إلى أنّ هناك العديد من الأحداث في انتظار كتابتها في إطار عمل
الأجهزة الاستشعارية. يشير ذلك إلى أنّ خدمة الاستشعار قد حدث بها تعارض أو تعطّلت
ولا تعالج أحداث الاستشعار، أو أنّه تم
نشر مجموعة كبيرة من أحداث الاستشعار مؤخرًا من وحدة HAL فرعية.
إذا كان عدد مراجع قفل التنشيط أكبر من 0
، يعني ذلك أنّ HalProxy
قد اكتسب قفل تنشيط. ومن المفترض أن تكون القيمة أكبر من 0
فقط إذا تم تجميد ScopedWakelock
بشكل متعمّد أو إذا تم إرسال أحداث الاستيقاظ إلى HalProxy
ولم تتم معالجتها من خلال إطار عمل أداة الاستشعار.
يتم تمرير واصف الملف الذي تم تمريره إلى طريقة تصحيح الأخطاء HalProxy
إلى كل
HAL فرعي، لذلك على المطوّرين تنفيذ طريقة تصحيح الأخطاء كجزء من
واجهة ISensorsSubHal
.