مستشعرات متعددة طبقة تجريد الأجهزة (HAL)

‫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 متعددة لأجهزة الاستشعار مع حزمة 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 على جهاز جديد، يُرجى اتّباع الخطوات التالية:

  1. نفِّذ واجهة ISensorsSubHal كما هو موضّح في SubHal.h.
  2. نفِّذ الطريقة sensorsHalGetSubHal_2_1 في SubHal.h.
  3. أضِف استهداف cc_library_shared لإنشاء "HAL" فرعي تم تنفيذه حديثًا. عند إضافة الاستهداف:

    1. تأكَّد من دفع القيمة المستهدَفة إلى مكان ما في قسم المورّد على الجهاز.
    2. في ملف الإعدادات الذي يقع في /vendor/etc/sensors/hals.conf، أضِف المسار إلى المكتبة في سطر جديد. إذا لزم الأمر، أنشئ ملف hals.conf.

    للحصول على مثال على إدخال Android.bp لإنشاء مكتبة فرعية لـ HAL، يُرجى الاطّلاع على hardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bp.

  4. أزِل جميع إدخالات android.hardware.sensors من ملف manifest.xml الذي يحتوي على قائمة HALs المتوافقة على الجهاز.

  5. أزِل جميع ملفات خدمة 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، اتّبِع الخطوات التالية.

  1. تأكَّد من ضبط إعدادات HAL لأدوات الاستشعار على /vendor/etc/sensors/hals.conf. قد يشمل ذلك نقل الملف المتوفّر في /system/etc/sensors/hals.conf.
  2. أزِل أي إشارات إلى hardware/hardware.h و hardware/sensors.h لأنّ هذه العناصر غير متوافقة مع HAL 2.0.
  3. نقل واجهات HAL الفرعية كما هو موضّح في مقالة نقل البيانات من Sensors Hal 1.0
  4. اضبط 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 فرعية مزيفة ودفعها إلى جهاز، اتخذ الخطوات التالية:

  1. شغِّل الأوامر التالية لإنشاء حالات 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
  2. عدِّل إعدادات 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
    
  3. أعِد تشغيل 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.