Sensors AIDL HAL

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

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

واجهة طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL)

المصدر الرئيسي للوثائق الخاصة بطبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار موجود ضمن تعريف طبقة تجريد الأجهزة في hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl.

تنفيذ طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار

لتنفيذ طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار، يجب أن يوسّع أحد العناصر واجهة ISensors وينفّذ جميع الدوال المحدّدة في hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl.

إعداد طبقة تجريد الأجهزة

يجب أن يتم إعداد طبقة تجريد الأجهزة لأجهزة الاستشعار من خلال إطار عمل أجهزة استشعار Android قبل أن يصبح بالإمكان استخدامها. يستدعي إطار العمل الدالة initialize() لتزويد طبقة تجريد الأجهزة لأجهزة الاستشعار بثلاث مَعلمات: وصفتان لـ FMQ ومؤشر واحد إلى عنصر ISensorsCallback.

تستخدِم طبقة تجريد الأجهزة الوصف الأول لإنشاء Event FMQ المستخدَم لكتابة أحداث أجهزة الاستشعار في إطار العمل. تستخدِم طبقة تجريد الأجهزة الوصف الثاني لإنشاء Wake Lock FMQ المستخدَم لمزامنة وقت تحرير طبقة تجريد الأجهزة لقفل التنبيه لأحداث أجهزة استشعار WAKE_UP. يجب أن تحفظ طبقة تجريد الأجهزة مؤشرًا إلى عنصر ISensorsCallback حتى يمكن استدعاء أيّ دوال ردّ اتصال ضرورية.

يجب أن تكون الدالة initialize() هي الدالة الأولى التي يتم استدعاؤها عند إعداد طبقة تجريد الأجهزة لأجهزة الاستشعار.

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

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

إذا كانت عدّة أجهزة استشعار تشترك في نوع جهاز الاستشعار نفسه وسمة التنبيه، يُطلق على جهاز الاستشعار الأول في القائمة اسم جهاز الاستشعار الافتراضي ويتم إرجاعه إلى التطبيقات التي تستخدِم الدالة getDefaultSensor(int sensorType, bool wakeUp).

ثبات قائمة أجهزة الاستشعار

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

لضمان ثبات مقابض أجهزة الاستشعار، يجب أن تربط طبقة تجريد الأجهزة بشكل حتمي جهاز استشعار فعليًا معيّنًا في الجهاز بمقبضه. على الرغم من أنّ واجهة طبقة تجريد الأجهزة لأجهزة الاستشعار لا تفرض أي عملية تنفيذ معيّنة، يتوفّر للمطوّرين عدد من الخيارات لاستيفاء هذا الشرط.

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

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

قبل تفعيل جهاز استشعار، يجب إعداد جهاز الاستشعار بفترة أخذ عيّنات وأقصى مدة انتظار للإبلاغ باستخدام الدالة batch().

يجب أن يكون بالإمكان إعادة إعداد جهاز الاستشعار في أي وقت باستخدام batch() بدون فقدان بيانات جهاز الاستشعار.

فترة أخذ العيّنات

تختلف فترة أخذ العيّنات استنادًا إلى نوع جهاز الاستشعار الذي يتم إعداده:

  • مستمر: يتم إنشاء أحداث جهاز الاستشعار بمعدّل مستمر.
  • عند التغيير: يتم إنشاء الأحداث بمعدّل لا يزيد عن فترة أخذ العيّنات، وقد يتم إنشاؤها بمعدّل أبطأ من فترة أخذ العيّنات إذا لم تتغيّر القيمة المقاسة.
  • للمرة الواحدة: يتم تجاهل فترة أخذ العيّنات.
  • خاص: لمزيد من التفاصيل، راجِع أنواع أجهزة الاستشعار.

للتعرّف على التفاعل بين فترة أخذ العيّنات وأوضاع الإبلاغ في جهاز الاستشعار ، راجِع أوضاع الإبلاغ.

الحد الأقصى لمدة انتظار الإبلاغ

يحدّد الحد الأقصى لمدة انتظار الإبلاغ الحد الأقصى للوقت بالنانو ثانية الذي يمكن فيه تأخير الأحداث وتخزينها في قائمة FIFO للأجهزة قبل كتابتها في Event FMQ من خلال طبقة تجريد الأجهزة أثناء تشغيل وحدة النظام على شريحة (SoC).

تشير القيمة صفر إلى أنّه يجب الإبلاغ عن الأحداث فور قياسها، إما بتخطّي قائمة FIFO تمامًا، أو بإفراغ قائمة FIFO فور توفّر حدث واحد من جهاز الاستشعار في قائمة FIFO.

على سبيل المثال، يؤدي مقياس التسارع الذي تم تفعيله بمعدّل 50 هرتز مع أقصى مدة انتظار للإبلاغ تبلغ صفرًا إلى تشغيل المقاطعات 50 مرة في الثانية عندما تكون وحدة النظام على شريحة (SoC) قيد التشغيل.

عندما يكون الحد الأقصى لمدة انتظار الإبلاغ أكبر من صفر، لا يلزم الإبلاغ عن أحداث جهاز الاستشعار فور رصدها. يمكن تخزين الأحداث مؤقتًا في قائمة FIFO للأجهزة والإبلاغ عنها على شكل دفعات، طالما لم يتم تأخير أي حدث لأكثر من الحد الأقصى لمدة انتظار الإبلاغ. يتم تسجيل جميع الأحداث منذ الدفعة السابقة وعرضها مرة واحدة. يقلّل ذلك من عدد المقاطعات المُرسَلة إلى وحدة النظام على شريحة (SoC) ويسمح لوحدة النظام على شريحة (SoC) بالتبديل إلى وضع استهلاك أقل للطاقة أثناء جمع جهاز الاستشعار للبيانات وتجميعها.

لكل حدث طابع زمني مرتبط به. يجب ألا يؤثر تأخير وقت الإبلاغ عن حدث في الطابع الزمني للحدث. يجب أن يكون الطابع الزمني دقيقًا ويتطابق مع وقت وقوع الحدث فعليًا، وليس وقت الإبلاغ عنه.

لمزيد من المعلومات والمتطلبات بشأن الإبلاغ عن أحداث أجهزة الاستشعار مع أقصى مدة انتظار للإبلاغ غير صفرية، راجِع التجميع.

تفعيل أجهزة الاستشعار

يُفعّل إطار العمل أجهزة الاستشعار ويوقفها باستخدام الدالة activate(). قبل تفعيل جهاز استشعار، يجب أن يضبط إطار العمل أولاً جهاز الاستشعار باستخدام batch().

بعد إيقاف جهاز استشعار، يجب عدم كتابة أحداث جهاز استشعار إضافية من جهاز الاستشعار هذا في Event FMQ.

تصفية أجهزة الاستشعار

إذا تم إعداد جهاز استشعار لتجميع بيانات جهاز الاستشعار، يمكن لإطار العمل فرض إفراغ فوري لأحداث جهاز الاستشعار المجمّعة من خلال استدعاء flush(). يؤدي ذلك إلى كتابة أحداث جهاز الاستشعار المجمّعة لمقبض جهاز الاستشعار المحدّد على الفور في Event FMQ. يجب أن تُلحق طبقة تجريد الأجهزة لأجهزة الاستشعار حدثًا يشير إلى اكتمال الإفراغ في نهاية أحداث جهاز الاستشعار التي تتم كتابتها نتيجةً لاستدعاء flush().

يحدث الإفراغ بشكل غير متزامن (أي يجب أن تعرض هذه الدالة على الفور). إذا كانت عملية التنفيذ تستخدِم قائمة FIFO واحدة لعدّة أجهزة استشعار، يتم إفراغ قائمة FIFO هذه ولا تتم إضافة حدث اكتمال الإفراغ إلا لجهاز الاستشعار المحدّد.

إذا لم يكن لجهاز الاستشعار المحدّد قائمة FIFO (لا يمكن التخزين المؤقت)، أو إذا كانت قائمة FIFO فارغة وقت استدعاء الدالة، يجب أن تنجح الدالة flush() وأن تُرسِل حدثًا يشير إلى اكتمال الإفراغ لجهاز الاستشعار هذا. ينطبق ذلك على جميع أجهزة الاستشعار باستثناء أجهزة الاستشعار التي تعمل للمرة الواحدة.

إذا تم استدعاء flush() لجهاز استشعار يعمل للمرة الواحدة، يجب أن تعرض flush() القيمة BAD_VALUE وألا تُنشئ حدثًا يشير إلى اكتمال الإفراغ.

كتابة أحداث أجهزة الاستشعار في FMQ

تستخدِم طبقة تجريد الأجهزة لأجهزة الاستشعار Event FMQ لإرسال أحداث أجهزة الاستشعار إلى إطار عمل أجهزة استشعار Android.

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

عندما تكتب طبقة تجريد الأجهزة لأجهزة الاستشعار العدد المطلوب من أحداث أجهزة الاستشعار في Event FMQ، يجب أن تُعلم إطار العمل بأنّ الأحداث جاهزة من خلال كتابة البت EventQueueFlagBits::READ_AND_PROCESS في الدالة EventFlag::wake الخاصة بـ Event FMQ. يمكن إنشاء EventFlag من Event FMQ باستخدام EventFlag::createEventFlag والدالة getEventFlagWord() الخاصة بـ Event FMQ.

تتيح طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار كلاً من write وwriteBlocking على Event FMQ. تقدّم عملية التنفيذ التلقائية مرجعًا لاستخدام write. إذا تم استخدام الدالة writeBlocking، يجب ضبط العلامة readNotification على EventQueueFlagBits::EVENTS_READ، التي يضبطها إطار العمل عند قراءة الأحداث من Event FMQ. يجب ضبط علامة إشعار الكتابة على EventQueueFlagBits::READ_AND_PROCESS، التي تُعلم إطار العمل بأنّه تمّت كتابة الأحداث في Event FMQ.

أحداث WAKE_UP

أحداث WAKE_UP هي أحداث أجهزة استشعار تؤدي إلى تنبيه معالج التطبيق (AP) ومعالجة الحدث على الفور. عند كتابة حدث WAKE_UP في Event FMQ، يجب أن تحصل طبقة تجريد الأجهزة لأجهزة الاستشعار على قفل التنشيط لضمان بقاء النظام في الوضع النشط إلى أن يتمكّن إطار العمل من معالجة الحدث. عند تلقّي حدث WAKE_UP، يحصل إطار العمل على قفل التنبيه الخاص به، ما يسمح لطبقة تجريد الأجهزة لأجهزة الاستشعار بتحرير قفل التنبيه الخاص بها. لمزامنة وقت تحرير طبقة تجريد الأجهزة لأجهزة الاستشعار لقفل التنبيه الخاص بها، استخدِم Wake Lock FMQ.

يجب أن تقرأ طبقة تجريد الأجهزة لأجهزة الاستشعار Wake Lock FMQ لتحديد عدد أحداث WAKE_UP التي عالجها إطار العمل. يجب ألا تحرّر طبقة تجريد الأجهزة قفل التنبيه الخاص بها لأحداث WAKE_UP إلا إذا كان إجمالي عدد أحداث WAKE_UP غير المعالَجة صفرًا. بعد معالجة أحداث أجهزة الاستشعار، يحسب إطار العمل عدد الأحداث التي تم وضع علامة عليها كأحداث WAKE_UP ويكتب هذا العدد مرة أخرى في Wake Lock FMQ.

يضبط إطار العمل إشعار الكتابة WakeLockQueueFlagBits::DATA_WRITTEN على Wake Lock FMQ كلما كتب بيانات في Wake Lock FMQ.

أجهزة الاستشعار الديناميكية

أجهزة الاستشعار الديناميكية هي أجهزة استشعار ليست جزءًا فعليًا من الجهاز ولكن يمكن استخدامها كإدخال للجهاز، مثل لوحة ألعاب مزوّدة بمقياس تسارع.

عند توصيل جهاز استشعار ديناميكي، يجب استدعاء الدالة onDynamicSensorConnected في ISensorsCallback من طبقة تجريد الأجهزة لأجهزة الاستشعار. يُعلم ذلك إطار العمل بجهاز الاستشعار الديناميكي الجديد ويسمح بالتحكّم في جهاز الاستشعار من خلال إطار العمل واستهلاك أحداث جهاز الاستشعار من قِبل العملاء.

وبالمثل، عند فصل جهاز استشعار ديناميكي، يجب استدعاء الدالة onDynamicSensorDisconnected في ISensorsCallback حتى يتمكّن إطار العمل من إزالة أي جهاز استشعار لم يعُد متاحًا.

قناة مباشرة

القناة المباشرة هي طريقة تشغيل يتم فيها كتابة أحداث أجهزة الاستشعار في ذاكرة معيّنة بدلاً من كتابتها في Event FMQ، ما يؤدي إلى تجاوز إطار عمل أجهزة استشعار Android. يجب أن يقرأ العميل الذي يسجّل قناة مباشرة أحداث جهاز الاستشعار مباشرةً من الذاكرة التي تم استخدامها لإنشاء القناة المباشرة ولن يتلقّى أحداث جهاز الاستشعار من خلال إطار العمل. تشبه الدالة configDirectReport() الدالة batch() للتشغيل العادي وتضبط قناة الإبلاغ المباشر.

تُنشئ الدالتان registerDirectChannel() وunregisterDirectChannel() قناة مباشرة جديدة أو تدمرانها.

أوضاع التشغيل

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

تُستخدَم الدالة injectSensorData() عادةً لإرسال مَعلمات التشغيل إلى طبقة تجريد الأجهزة لأجهزة الاستشعار. يمكن أيضًا استخدام الدالة لإدخال أحداث جهاز الاستشعار في جهاز استشعار معيّن.

التحقق من صحة البيانات

للتحقّق من صحة عملية تنفيذ طبقة تجريد الأجهزة لأجهزة الاستشعار، شغِّل اختبارات CTS وVTS لجهاز الاستشعار.

اختبارات CTS

تتوفّر اختبارات CTS لجهاز الاستشعار في كل من اختبارات CTS المبرمَجة وتطبيق CTS Verifier اليدوي.

توجد الاختبارات المبرمَجة في cts/tests/sensor/src/android/hardware/cts. تتحقّق هذه الاختبارات من الوظائف العادية لأجهزة الاستشعار، مثل تفعيل أجهزة الاستشعار والتجميع ومعدّلات أحداث أجهزة الاستشعار.

توجد اختبارات CTS Verifier في cts/apps/CtsVerifier/src/com/android/cts/verifier/sensors. تتطلّب هذه الاختبارات إدخال بيانات يدويًا من مشغّل الاختبار وتضمن أن تعرض أجهزة الاستشعار قيمًا دقيقة.

إنّ اجتياز اختبارات CTS أمر بالغ الأهمية لضمان استيفاء الجهاز قيد الاختبار جميع متطلبات مستند تعريف التوافق (CDD).

اختبارات VTS

توجد اختبارات VTS لطبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار في hardware/interfaces/sensors/aidl/vts/. تضمن هذه الاختبارات تنفيذ طبقة تجريد الأجهزة لأجهزة الاستشعار بشكل صحيح واستيفاء جميع المتطلبات الواردة في ISensors.aidl وISensorsCallback.aidl بشكل صحيح.

إعداد طبقة تجريد الأجهزة

يجب أن تكون الدالة initialize() متاحة لإنشاء قوائم FMQ بين إطار العمل وطبقة تجريد الأجهزة.

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

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

كتابة أحداث أجهزة الاستشعار في FMQ

بدلاً من انتظار استدعاء poll()، يجب أن تكتب طبقة تجريد الأجهزة لأجهزة الاستشعار بشكل استباقي أحداث أجهزة الاستشعار في Event FMQ كلما كانت أحداث أجهزة الاستشعار متاحة في طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار. تكون طبقة تجريد الأجهزة مسؤولة أيضًا عن كتابة البتات الصحيحة في EventFlag لتشغيل عملية قراءة FMQ ضمن إطار العمل.

أحداث WAKE_UP

في طبقة تجريد الأجهزة لأجهزة الاستشعار 1.0، كان بإمكان طبقة تجريد الأجهزة تحرير قفل التنبيه الخاص بها لأي حدث WAKE_UP في أي استدعاء لاحق لـ poll() بعد نشر WAKE_UP في poll() لأنّ ذلك يشير إلى أنّ إطار العمل قد عالج جميع أحداث أجهزة الاستشعار وحصل على قفل تنبيه، إذا لزم الأمر. في طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار، لم يعُد يتم إشعار طبقة تجريد الأجهزة عندما يعالج إطار العمل الأحداث المكتوبة في FMQ، لذا يسمح Wake Lock FMQ لإطار العمل بالتواصل مع طبقة تجريد الأجهزة عندما يعالج أحداث WAKE_UP.

في طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار، يجب أن يبدأ قفل التنبيه الذي تحصل عليه طبقة تجريد الأجهزة لأجهزة الاستشعار لأحداث WAKE_UP بـ SensorsHAL_WAKEUP.

أجهزة الاستشعار الديناميكية

تم عرض أجهزة الاستشعار الديناميكية باستخدام الدالة poll() في طبقة تجريد الأجهزة لأجهزة الاستشعار 1.0. تتطلّب طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار استدعاء onDynamicSensorsConnected وonDynamicSensorsDisconnected في ISensorsCallback كلما تغيّرت اتصالات أجهزة الاستشعار الديناميكية. تتوفّر عمليات ردّ الاتصال هذه كجزء من مؤشر ISensorsCallback الذي يتم توفيره من خلال الدالة initialize().

أوضاع التشغيل

يجب أن يكون وضع DATA_INJECTION لأجهزة استشعار WAKE_UP متاحًا.

دعم طبقات تجريد الأجهزة المتعددة

تتيح طبقة تجريد الأجهزة المستندة إلى لغة وصف الواجهة المستقلة عن اللغة (AIDL) لأجهزة الاستشعار استخدام طبقات تجريد الأجهزة المتعددة باستخدام الـ Sensors Multi-HAL framework. لمعرفة تفاصيل عملية التنفيذ، راجِع النقل من طبقة تجريد الأجهزة لأجهزة الاستشعار 2.1.