Sensors HAL 2.0

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

يتوفّر الإصدار 2.0 من طبقة تجريد الأجهزة (HAL) الخاصة بأجهزة الاستشعار في نظام التشغيل Android 10 والإصدارات الأحدث للأجهزة الجديدة والمحدَّثة. يستند الإصدار 2.0 من طبقة تجريد الأجهزة (HAL) الخاصة بأدوات الاستشعار إلى الإصدار 1.0 من طبقة تجريد الأجهزة (HAL) الخاصة بأدوات الاستشعار، ولكنّه يتضمّن العديد من الاختلافات الرئيسية التي تمنع توافقه مع الإصدارات السابقة. يستخدم الإصدار 2.0 من طبقة تجريد الأجهزة (HAL) الخاصة بأدوات الاستشعار قوائم انتظار الرسائل السريعة (FMQ) لإرسال أحداث أدوات الاستشعار من طبقة HAL إلى إطار عمل أدوات الاستشعار في Android.

يتوفّر الإصدار 2.1 من طبقة تجريد الأجهزة (HAL) الخاصة بأجهزة الاستشعار في نظام التشغيل Android 11 والإصدارات الأحدث للأجهزة الجديدة والمحدَّثة. ‫Sensors HAL 2.1 هو تكرار لـ Sensors HAL 2.0 يعرض نوع أداة الاستشعار HINGE_ANGLE ويعدّل طرقًا مختلفة لقبول النوع HINGE_ANGLE.

واجهة HAL 2.1

يقع المصدر الرئيسي لوثائق Sensors HAL 2.1 ضمن تعريف HAL في hardware/interfaces/sensors/2.1/ISensors.hal. في حال حدوث تعارض بين المتطلبات الواردة في هذه الصفحة والمتطلبات الواردة في ISensors.hal، يجب اتّباع المتطلبات الواردة في ISensors.hal.

واجهة HAL 2.0

يقع المصدر الرئيسي للمستندات الخاصة بإصدار 2.0 من طبقة تجريد الأجهزة (HAL) الخاصة بأجهزة الاستشعار ضمن تعريف طبقة تجريد الأجهزة (HAL) في hardware/interfaces/sensors/2.0/ISensors.hal. في حال حدوث تعارض بين المتطلبات الواردة في هذه الصفحة والمتطلبات الواردة في ISensors.hal، يجب اتّباع المتطلبات الواردة في ISensors.hal.

تنفيذ الإصدارَين 2.0 و2.1 من طبقة تجريد الأجهزة (HAL) الخاصة بأدوات الاستشعار

لتنفيذ الإصدار 2.0 أو 2.1 من طبقة تجريد الأجهزة (HAL) الخاصة بأجهزة الاستشعار، يجب أن يوسّع أحد العناصر واجهة ISensors وأن ينفّذ جميع الدوال المحدّدة في 2.0/ISensors.hal أو 2.1/ISensors.hal.

إعداد طبقة HAL

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

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

يجب أن تكون الدالة initialize() أو الدالة initialize_2_1() هي الدالة الأولى التي يتم استدعاؤها عند تهيئة Sensors HAL.

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

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

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

ثبات قائمة أدوات الاستشعار

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

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

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

ضبط أجهزة الاستشعار

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

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

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

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

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

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

الحد الأقصى لمدة انتظار إعداد التقارير

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

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

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

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

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

للحصول على معلومات ومتطلبات إضافية حول تسجيل أحداث المستشعر مع الحد الأقصى لوقت الاستجابة غير الصفري، يُرجى الاطّلاع على التجميع.

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

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

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

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

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

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

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

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

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

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

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

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

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

أحداث WAKE_UP

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

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

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

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

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

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

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

قناة مباشرة

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

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

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

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

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

التحقُّق

للتحقّق من صحة تنفيذ طبقة تجريد الأجهزة (HAL) الخاصة بأجهزة الاستشعار، شغِّل اختبارات 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 للإصدار 2.0 من Sensors HAL في hardware/interfaces/sensors/2.0/vts. تتوفّر اختبارات VTS الخاصة بإصدار 2.1 من Sensors HAL في hardware/interfaces/sensors/2.1/vts. تضمن هذه الاختبارات تنفيذ Sensors HAL بشكل سليم واستيفاء جميع المتطلبات الواردة في ISensors.hal وISensorsCallback.hal بشكل سليم.

الترقية إلى الإصدار 2.1 من طبقة تجريد الأجهزة (HAL) الخاصة بأدوات الاستشعار من الإصدار 2.0

عند الترقية إلى الإصدار 2.1 من Sensors HAL من الإصدار 2.0، يجب أن يتضمّن تنفيذ HAL الطرق initialize_2_1() وgetSensorsList_2_1() وinjectSensorsData_2_1()، بالإضافة إلى أنواع الإصدار 2.1 من HAL. ويجب أن تستوفي هذه الطرق المتطلبات نفسها الموضّحة أعلاه بشأن HAL 2.0.

بما أنّ إصدارات HAL الثانوية يجب أن تتوافق مع جميع الوظائف من إصدارات HAL السابقة، يجب أن تتوافق إصدارات HAL 2.1 مع إمكانية تهيئتها كإصدارات HAL 2.0. ولتجنُّب تعقيد عملية توفير الدعم لكلا إصدارَي HAL، ننصحك بشدة باستخدام Multi-HAL 2.1.

للاطّلاع على مثال حول كيفية تنفيذ طبقة تجريد الأجهزة (HAL) الخاصة بأدوات الاستشعار 2.1، راجِع Sensors.h.

الترقية إلى الإصدار 2.0 من طبقة تجريد الأجهزة (HAL) الخاصة بأدوات الاستشعار من الإصدار 1.0

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

إعداد طبقة HAL

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

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

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

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

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

أحداث WAKE_UP

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

في Sensors HAL 2.0، يجب أن يبدأ قفل التنشيط الذي يوفّره Sensors HAL لأحداث WAKE_UP بالقيمة SensorsHAL_WAKEUP.

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

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

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

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

دعم طبقات HAL المتعددة

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