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

تتيح أجهزة الاستشعار المتعددة HAL إطار عمل يتيح للمستشعرات تشغيل مستويات HALs جنبًا إلى جنب مع وغيرها من طبقات HALs للمستشعر. تحمّل أجهزة الاستشعار المتعددة HAL بشكل ديناميكي مستويات أدنى من البث المباشر للاستشعار المخزنة كمكتبات ديناميكية في قسم المورد وتطلب معاودة الاتصال يمكنه التعامل مع نشر الأحداث والحصول على قفل التنشيط وتحريره. واجهة HAL الفرعية لأجهزة الاستشعار هي واجهة HAL لأجهزة الاستشعار تم إنشاؤها في عنصر مشترَك على ملف "قسم المورّد" ويستخدمها إطار عمل HAL المتعدّد. لا تعتمد وحدات HAL الفرعية هذه على بعضها البعض أو على رمز HAL المتعدّد الذي يحتوي على الدالة الرئيسية للعملية.

‫Sensors Multi-HAL 2.1، المتوفّر على الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث، هو إصدار معدَّل من Sensors Multi-HAL 2.0 يتيح تحميل واجهات HAL الفرعية التي يمكنها عرض نوع مستشعر زاوية المفصلة. لتتوافق مع هذا النوع من أجهزة الاستشعار، يجب أن تستخدم واجهات برمجة التطبيقات الفرعية لواجهة HAL واجهات برمجة التطبيقات الفرعية لواجهة HAL المحدّدة في عنوان SubHal 2.1.

بالنسبة إلى الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث والتي تستخدم واجهة HAL لأجهزة الاستشعار AIDL، يمكنك استخدام طبقة الحشو المتعدّدة واجهات HAL للسماح بإمكانية استخدام واجهات HAL المتعدّدة. للاطّلاع على تفاصيل التنفيذ الرؤية استخدام أجهزة استشعار متعدّدة (HAL) مع واجهة AIDL HAL الخاصة بأجهزة الاستشعار

الفرق بين أجهزة الاستشعار Multi-HAL 2 وأجهزة الاستشعار HAL 2

تتوفّر أجهزة الاستشعار Multi-HAL 2 على الأجهزة التي تعمل بنظام التشغيل Android 10 أو أعلى، ويقدم عدة تجريدات أعلى الحساسات HAL 2 لتسهيل للتفاعل مع واجهات برمجة تطبيقات HAL. يقدّم Sensors Multi-HAL 2 فئة HalProxy لمعالجة تنفيذ واجهة Sensors HAL 2 وواجهة V2_1/SubHal (أو V2_0/SubHal) للسماح لـ HalProxy بالتفاعل مع واجهات HAL الفرعية.

تختلف واجهة ISensorsSubHal عن واجهة 2.1/ISensors.hal (أو 2.0/ISensors.hal) بالطُرق التالية:

  • تُمرِّر طريقة الإعداد فئة IHalProxyCallback بدلاً من فئتَي FMQ وISensorsCallback.
  • يجب أن تنفذ "HALs" الفرعية دالة تصحيح أخطاء لتوفير تصحيح الأخطاء المعلومات في تقارير الأخطاء.
  • يجب أن تُنفِّذ وحدات HAL الفرعية دالة اسم حتى يمكن تمييز وحدة HAL الفرعية المحمَّلة عن وحدات HAL الفرعية الأخرى.

يكمن الاختلاف الرئيسي بين Sensors Multi-HAL 2 وSensors HAL 2 في وظائف الإعداد. بدلاً من توفير أجهزة FMQ، يمكن لـ IHalProxyCallback توفير طريقتين، إحداهما لنشر أحداث المستشعر إلى أدوات الاستشعار وطريقة واحدة لإنشاء عمليات قفل التنشيط. في الخلفية، يدير "HAL المتعدّد للأجهزة الحسّاسة" جميع التفاعلات مع طلبات الجلسة القصيرة (FMQ) لضمان إرسال أحداث الأجهزة الحسّاسة في الوقت المناسب لجميع HAL الفرعية. ننصحك بشدة بأن تستخدم واجهات HAL الفرعية createScopedWakelock لتحديد مهلة قفل الاستيقاظ وتحميلها على واجهة HAL المتعددة لأجهزة الاستشعار، ومركزة استخدام قفل الاستيقاظ على قفل استيقاظ شائع واحد لواجهة HAL المتعددة لأجهزة الاستشعار بالكامل، ما يقلل من عدد طلبات القفل وفتح القفل.

يتضمّن Sensors Multi-HAL 2 أيضًا بعض ميزات الأمان المدمجة. ويعالج المواقف التي يكون فيها "الملف المؤقت للطلبات في نظام التشغيل Android" الخاص بجهاز الاستشعار ممتلئًا أو عندما تتم إعادة تشغيل إطار عمل أجهزة الاستشعار في Android وتحتاج إلى إعادة ضبط حالة جهاز الاستشعار. بالإضافة إلى ذلك، عندما يتم تسجيل الأحداث في فئة HalProxy ولكن يتعذّر على إطار عمل أداة الاستشعار قبول الأحداث على الفور، يمكن أن تنقل حزمة Sensors Multi-HAL الأحداث إلى سلسلة مهام في الخلفية للسماح بمواصلة العمل على جميع حِزم HAL الفرعية أثناء انتظار نشر الأحداث.

تنفيذ رمز المصدر والمرجع

يتوفّر رمز All Sensors Multi-HAL في hardware/interfaces/sensors/common/default/2.X/multihal/. في ما يلي إرشادات لبعض الموارد.

  • HalProxy.h: يتم إنشاء مثيل للكائن HalProxy من خلال حِزم HAL المتعددة الخاصة بأجهزة الاستشعار، ويتولى معالجة نقل البيانات من حِزم HAL الفرعية إلى إطار عمل أجهزة الاستشعار.
  • HalProxy.cpp: يحتوي تنفيذ HalProxy على كل المنطق المطلوب للقيام بعمليات معالجة متعدّدة للتواصل بين واجهات HAL الفرعية وإطار عمل أداة الاستشعار.
  • SubHal.h: تحدد الواجهة ISensorsSubHal الواجهة التي يجب أن تتوفر لها فئات HALs فرعية يجب متابعتها لتتوافق مع 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 فرعية على جهاز.

التنفيذ

يوضّح هذا القسم كيفية تنفيذ حِزم HAL المتعددة لأجهزة الاستشعار في الحالات التالية:

استخدام حزمة HAL متعددة لأجهزة الاستشعار مع حزمة HAL لأجهزة الاستشعار AIDL

للسماح بإمكانية استخدام واجهات HAL متعددة مع حزمة HAL لأجهزة الاستشعار من AIDL، استورِد وحدة طبقة الحشو لواجهة HAL متعددة من AIDL، والتي يمكن العثور عليها في hardware/interfaces/sensors/aidl/default/multihal/. تتعامل الوحدة مع عملية التحويل بين تعريف HAL لمستشعرَي AIDL وHIDL. ويحدد برنامج تضمين لواجهة HAL المتعددة الموضحة في تطبيق أجهزة الاستشعار Multi-HAL 2.1: معيار AIDL متعدد المستويات تتوافق طبقة شيم مع الأجهزة التي تطبق أدوات الاستشعار Multi-HAL 2.1.

تسمح لك طبقة الحشو لواجهة HAL المتعدّدة في AIDL بعرض أداة تتبُّع الرأس وأنواع أدوات استشعار IMU ذات المحاور المحدودة في واجهة HAL لأجهزة الاستشعار في AIDL. لاستخدام أجهزة الاستشعار هذه محددة من خلال واجهة AIDL HAL، اضبط الحقل type في بنية SensorInfo في تنفيذ getSensorsList_2_1(). هذا آمن لأنّ حقول نوع أداة الاستشعار المدعومة بعدد صحيح في كل من مستشعرَي AIDL وHIDL HAL لا تتداخلان.

تنفيذ أجهزة الاستشعار 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 الفرعية.

في ما يلي الاختلافات بين واجهتي الإصدار 2.0 و2.1 SubHal:

  • يستخدم IHalProxyCallback الأنواع التي تم إنشاؤها في الإصدار 2.1 من مواصفات ISensors.hal
  • تُرسِل الدالة initialize() قيمة جديدة لملف IHalProxyCallback بدلاً من القيمة الواردة من واجهة SubHal 2.0.
  • يجب أن تُنفِّذ واجهات HAL الفرعية getSensorsList_2_1 وinjectSensorData_2_1 بدلاً من getSensorsList وinjectSensorData لأنّ هاتين الطريقتَين تستخدمان الأنواع الجديدة التي تمت إضافتها في الإصدار 2.1 من مواصفات ISensors.hal.
  • يجب أن تعرض واجهات HAL الفرعية sensorsHalGetSubHal_2_1 بدلاً من sensorsHalGetSubHal لكي تتعامل Multi-HAL معها كواجهات HAL فرعية من الإصدار 2.1 .

منفذ من أجهزة الاستشعار HAL 2.0

عند الترقية إلى أجهزة الاستشعار Multi-HAL 2.0 من Sensors Multi-HAL 2.0 2.0، تأكد من HAL التنفيذ يلبي المتطلبات التالية.

بدء HAL

تتضمن أجهزة الاستشعار HAL 2.0 وظيفة تهيئة تتيح لخدمة الاستشعار لتمرير FMQs واستدعاء جهاز الاستشعار الديناميكي. في حزمة Sensors Multi-HAL 2.0، تُرسِل الدالة initialize() طلب استدعاء واحدًا يجب استخدامه لنشر أحداث أجهزة الاستشعار والحصول على عمليات قفل الاستيقاظ والإشعار بعمليات الربط والفصل الديناميكية لأجهزة الاستشعار.

نشر أحداث المستشعرات في عملية تنفيذ Multi-HAL

بدلاً من نشر أحداث أجهزة الاستشعار من خلال FMQ، يجب أن يكتب HAL الفرعي أحداث أجهزة الاستشعار في IHalProxyCallback عندما تكون أحداث أجهزة الاستشعار متاحة.

أحداث WAKE_UP

في Sensors HAL 2.0، يمكن لواجهة HAL إدارة قفل الاستيقاظ لتنفيذه. ضِمن أجهزة الاستشعار Multi-HAL 2.0، تتيح تطبيق HAL-HAL الفرعي ما يلي: إدارة عمليات قفل التنشيط ويمكن أن تطلب الحصول على قفل التنشيط من خلال الاستدعاء createScopedWakelock يجب الحصول على قفل تنشيط مقيّد النطاق ونقله إلى postEvents عند نشر أحداث التنشيط إلى تنفيذ Multi-HAL.

أدوات الاستشعار الديناميكية

تتطلّب حزمة Sensors Multi-HAL 2.0 استدعاء onDynamicSensorsConnected و onDynamicSensorsDisconnected في IHalProxyCallback عند تغيير اتصالات أداة الاستشعار الديناميكية. تتوفّر وظائف ردّ الاتصال هذه كجزء من مؤشر IHalProxyCallback الذي يتم توفيره من خلال دالة initialize().

منفذ من Sensors HAL 1.0

عند الترقية إلى حزمة Sensors Multi-HAL 2.0 من حزمة Sensors HAL 1.0، تأكَّد من أنّ تنفيذ HAL يستوفي المتطلبات التالية.

تهيئة HAL

يجب أن تكون دالة initialize() متوافقة لإنشاء دالة ردّ الاتصال بين HAL الفرعي وتنفيذ Multi-HAL.

إتاحة أجهزة الاستشعار المتاحة

في أجهزة الاستشعار Multi-HAL 2.0، يجب أن تعرض الدالة getSensorsList() القيمة نفسها خلال عملية تشغيل جهاز واحد، حتى في عمليات إعادة تشغيل طبقة تجريد الأجهزة (HAL) في المستشعرات. هذا يسمح إطار العمل لمحاولة إعادة إنشاء اتصالات جهاز الاستشعار إذا كان خادم النظام تتم إعادة تشغيله. يمكن أن تتغيّر القيمة التي يعرضها getSensorsList() بعد أن يُعيد الجهاز تشغيله.

نشر أحداث أداة الاستشعار في التنفيذ المتعدد المستويات (HAL)

أمّا في أجهزة الاستشعار HAL 2.0، فبدلاً من الانتظار حتى يتم طلب poll()، كتابة أحداث أداة الاستشعار بشكل استباقي IHalProxyCallback متى توفرت أحداث المستشعر.

أحداث WAKE_UP

في Sensors HAL 1.0، يمكن لواجهة HAL إدارة قفل الاستيقاظ لتنفيذه. ضِمن أجهزة استشعار Multi-HAL 2.0، وهي الأجهزة الفرعية HALs التي تسمح بتنفيذ مستويات HAL متعددة إدارة عمليات قفل التنشيط ويمكن أن تطلب الحصول على قفل التنشيط من خلال الاستدعاء createScopedWakelock يجب الحصول على قفل تنشيط مُقفَل النطاق وتمريره إلى postEvents عند ذلك. نشر أحداث الاستيقاظ في تنفيذ بروتوكول HAL المتعدد.

أدوات الاستشعار الديناميكية

في أجهزة الاستشعار HAL 1.0، يتم عرض أدوات الاستشعار الديناميكية من خلال الدالة poll(). تتطلّب حزمة Sensors 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. منفذ HALs فرعيًا على النحو الموضَّح في نقل البيانات من أجهزة الاستشعار هال الإصدار 1.0
  4. اضبط أجهزة الاستشعار Multi-HAL 2.0 على أنها HAL (HAL) محددة باتّباع الخطوتَين 3 و 4 في القسم تنفيذ أجهزة الاستشعار Mutli-HAL 2.0.

التحقُّق

تشغيل أداة VTS

وعند دمج واحدة أو أكثر من أجهزة HALs الفرعية مع أجهزة الاستشعار Multi-Hal 2.1، استخدام حزمة اختبار المورّد (VTS) للتأكّد من أنّ الحزمة الفرعية تلبي عمليات التنفيذ جميع المتطلبات التي تحدّدها واجهة 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

إذا كنت تستخدم طبقة الحشو لـ Multi-HAL في AIDL، شغِّل VtsAidlHalSensorsTargetTest.

vts-tradefed run commandAndExit vts \
    --skip-all-system-status-check \
    --primary-abi-only \
    --skip-preconditions \
    --module VtsAidlHalSensorsTargetTest

إجراء اختبارات الوحدة

تختبر الوحدة في اختبار HalProxy_test.cpp HalProxy باستخدام درجات حرارة فرعية زائفة مزيفة يتم إنشاء مثيل لها في اختبار الوحدة ولا يتم تحميلها ديناميكيًا. عند إنشاء ملف HAL فرعي جديد، يجب أن تكون هذه الاختبارات بمثابة دليل حول كيفية إضافة اختبارات وحدات تتحقق من تنفيذ ملف HAL الفرعي الجديد بشكل صحيح.

لتنفيذ الاختبارات، نفِّذ الأوامر التالية:

cd $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests
atest

إجراء الاختبارات باستخدام طبقات HAL الفرعية الزائفة

إن HALs الفرعية المزيفة هي عمليات تنفيذ وهمية لواجهة ISensorsSubHal. تكشف درجات الحرارة الفرعية (HALs) عن قوائم مختلفة من المستشعرات. عند تفعيل أجهزة الاستشعار، تنشر هذه الأجهزة بشكل دوري أحداث أجهزة الاستشعار التي يتم إنشاؤها تلقائيًا على HalProxy استنادًا إلى الفواصل الزمنية المحدّدة في طلب جهاز استشعار معيّن.

يمكن استخدام طبقات HALs الفرعية الزائفة لاختبار كيفية عمل رمز Multi-HAL الكامل مع هي نطاقات HALs الأخرى المحملة في النظام وللتركيز على الجوانب المختلفة رمز أجهزة استشعار Multi-HAL

يتوفّر اثنان من واجهات HAL الفرعية المزيفة على الرابط hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/.

لإنشاء واجهات HAL الفرعية المزيّفة ودفعها إلى جهاز، اتّبِع الخطوات التالية:

  1. شغِّل الأوامر التالية لإنشاء ملفّات HAL الفرعية المزيّفة الثلاثة ودفعها إلى الجهاز:

    $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 باستخدام مسارات HALs الفرعية المزيفة.

    /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. لطلب ملف مخرجات debugging لواجهة HAL الخاصة بأجهزة الاستشعار، شغِّل الأمر التالي:

adb root
adb shell lshal debug android.hardware.sensors@2.1::ISensors/default

وعندئذٍ، يتم عرض معلومات عن حالة HalProxy وحمّامات HAL الفرعية التابعة له. إخراجه إلى الوحدة الطرفية. في ما يلي مثال على نتيجة الأمر المتعلّق بعنصر 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.