Sensors HAL 2.0

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

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

تتوفّر طبقة تجريد الأجهزة لأجهزة الاستشعار 2.1 في Android 11 والإصدارات الأحدث للأجهزة الجديدة والمطوّرة. طبقة تجريد الأجهزة لأجهزة الاستشعار 2.1 هي تكرار لطبقة تجريد الأجهزة لأجهزة الاستشعار 2.0 التي تكشف عن HINGE_ANGLE نوع جهاز الاستشعار وتعدّل طرقًا مختلفة لقبول النوع HINGE_ANGLE.

واجهة طبقة تجريد الأجهزة 2.1

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

واجهة طبقة تجريد الأجهزة 2.0

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

تنفيذ طبقة تجريد الأجهزة لأجهزة الاستشعار 2.0 و2.1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الحد الأقصى لمدّة التأخير في إرسال التقارير

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

أحداث WAKE_UP

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

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

يضبط إطار العمل إشعار الكتابة WakeLockQueueFlagBits::DATA_WRITTEN في قائمة انتظار الرسائل السريعة لقفل التنبيه كلما كتب بيانات في قائمة انتظار الرسائل السريعة لقفل التنبيه.

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

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

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

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

قناة مباشرة

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

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

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

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

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

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

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

الترقية إلى طبقة تجريد الأجهزة لأجهزة الاستشعار 2.1 من 2.0

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

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

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

الترقية إلى طبقة تجريد الأجهزة لأجهزة الاستشعار 2.0 من 1.0

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

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

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

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

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

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

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

أحداث WAKE_UP

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

في طبقة تجريد الأجهزة لأجهزة الاستشعار 2.0، يجب أن يبدأ قفل التنبيه الذي تحصل عليه طبقة تجريد الأجهزة لأجهزة الاستشعار لأحداث WAKE_UP بـ SensorsHAL_WAKEUP.

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

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

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

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

التوافق مع Multi-HAL

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