إن طبقة تجريد أجهزة الاستشعار (HAL) هي الواجهة بين إطار عمل أجهزة استشعار Android وأدوات الاستشعار في الجهاز، مثل مقياس التسارع أو الجيروسكوب. تحدد طبقة تجريد الأجهزة (HAL) لأجهزة الاستشعار الوظائف التي يجب تنفيذها يسمح لإطار العمل بالتحكم في المستشعرات.
تتوفَّر أداة الاستشعار AIDL HAL في نظام التشغيل Android 13 أعلى للأجهزة الجديدة والتي تمت ترقيتها. تُعد أجهزة الاستشعار AIDL HAL، التي تستند إلى أجهزة الاستشعار HAL 2.1، تستخدم واجهة AIDL HAL و جهاز تتبُّع الرأس وأنواع أجهزة استشعار IMU محدودة المحور
واجهة AIDL HAL
إن المصدر الرئيسي للوثائق المتعلقة بسطح المكتب (HAL) لأجهزة الاستشعار AIDL هو التعريف في hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl.
تنفيذ قناة AIDL HAL الخاصة بأجهزة الاستشعار
لتنفيذ اختبارات AIDL HAL الخاصة بأجهزة الاستشعار، يجب أن يوسِّع الكائن ISensors
.
الواجهة وتنفيذ جميع الدوال المحددة في
hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl.
تهيئة HAL
يجب إعداد طبقة تجريد الأجهزة (HAL) لأجهزة الاستشعار من خلال إطار عمل أداة استشعار Android قبل أن يتم
تنبؤي. يستدعي إطار العمل الدالة initialize()
لتوفير ثلاث قيم
المَعلَمات إلى HAL لأدوات الاستشعار: واصفان FMQ ومؤشر واحد إلى
كائن ISensorsCallback
.
تستخدم طبقة تجريد الأجهزة (HAL) أداة الوصف الأولى لإنشاء أداة FMQ المستخدمة في كتابة أداة الاستشعار
الأحداث لإطار العمل. تستخدم طبقة تجريد الأجهزة (HAL) الواصف الثاني لإنشاء حدث Wake
قفل FMQ المستخدمة للمزامنة عند إصدار HAL لقفل التنشيط للجهاز WAKE_UP
أحداث أجهزة الاستشعار. يجب أن تحفظ طبقة تجريد الأجهزة (HAL) مؤشرًا في الكائن ISensorsCallback
كي
أنه يمكن استدعاء أي دوال استدعاء ضرورية.
يجب أن تكون الدالة initialize()
هي الدالة الأولى التي يتم استدعاءها عند الإعداد
طبقة تجريد الأجهزة (HAL)
لأجهزة الاستشعار.
عرض أجهزة الاستشعار المتاحة
للحصول على قائمة بجميع أجهزة الاستشعار الثابتة المتاحة في الجهاز، يمكنك استخدام
getSensorsList()
. تُرجع هذه الدالة قائمة بأجهزة الاستشعار،
يتم تحديدها بشكل فريد من خلال اسمها المعرِّف. يجب ألا يتغيّر المقبض الخاص بجهاز استشعار معيَّن.
عند إعادة تشغيل العملية التي تستضيف HAL للمستشعرات. قد تتغير الأسماء المعرِّفة بين
وإعادة تشغيل الجهاز وإعادة التشغيل عبر خادم النظام.
إذا كانت هناك عدة أجهزة استشعار تشترك في نوع أداة الاستشعار نفسيهما وخاصية التنشيط، عندها
يُسمى أول جهاز استشعار في القائمة أداة الاستشعار التلقائية ويتم إرجاعه إلى
التطبيقات التي تستخدم getDefaultSensor(int sensorType, bool wakeUp)
الأخرى.
قائمة ثبات أجهزة الاستشعار
بعد إعادة تشغيل طبقة تجريد الأجهزة (HAL) لأجهزة الاستشعار، إذا تم عرض البيانات من خلال getSensorsList()
إلى تغير كبير مقارنةً بقائمة المستشعرات التي تم استردادها قبل
فإن إطار العمل يؤدي إلى إعادة تشغيل
وقت تشغيل Android تشمل التغييرات المهمة التي تطرأ على قائمة أجهزة الاستشعار الحالات التي
أداة الاستشعار التي لها مقبض معيّن تكون مفقودة أو تغيّرت سمات، أو عندما تكون
إدخال أجهزة استشعار. على الرغم من أنّ إعادة تشغيل بيئة تشغيل Android مزعجة.
للمستخدم، مطلوبة لأن إطار عمل Android لم يعد بإمكانه تلبية
Android API على أن لا تتغيّر أدوات الاستشعار الثابتة (غير الديناميكية) خلال
عمر التطبيق. وقد يمنع ذلك أيضًا إطار العمل من إعادة تأسيسه
طلبات الاستشعار النشطة الصادرة عن التطبيقات لذلك، يُنصح موردي HAL
لمنع التغييرات التي يمكن تجنبها في قائمة أجهزة الاستشعار.
لضمان أن تكون مقابض جهاز الاستشعار الثابتة، يجب أن تحدّد طبقة تجريد الأجهزة (HAL) بشكل قاطع أداة الاستشعار الفعلية في الجهاز إلى مقبضه. على الرغم من عدم وجود عملية تنفيذ محددة من خلال واجهة أجهزة الاستشعار HAL، يتوفّر للمطوّرين عدد من الخيارات المتاحة لتلبية هذا الشرط.
على سبيل المثال، يمكن ترتيب قائمة المستشعرات باستخدام مجموعة من أدوات الاستشعار
السمات الثابتة، مثل البائع والطراز ونوع أداة الاستشعار. هناك خيار آخر يعتمد
أن مجموعة أجهزة الاستشعار الثابتة مُثبّتة في الأجهزة، وبالتالي
تحتاج تقنية HAL إلى معرفة وقت اكتمال تهيئة جميع أدوات الاستشعار المتوقعة قبل
العودة من getSensorsList()
. تحتوي قائمة
يمكن تجميع المستشعرات المتوقعة في برنامج ثنائي HAL أو تخزينها في
ملف تهيئة في نظام الملفات، ويمكن استخدام ترتيب الظهور
للحصول على مقابض ثابتة. وعلى الرغم من أن أفضل حل يعتمد على المبادئ الصحية
تفاصيل تنفيذ محددة، فإن المطلب الرئيسي هو أن تتعامل أداة الاستشعار
عدم تغييرها عبر عمليات إعادة تشغيل HAL.
ضبط أدوات الاستشعار
قبل تشغيل جهاز استشعار، يجب ضبط إعدادات أداة الاستشعار على بيانات أخذ عينات من المحتوى.
فترة زمنية وأقصى وقت استجابة لإعداد التقارير باستخدام الدالة batch()
.
يجب أن تكون هناك إمكانية لإعادة ضبط أي جهاز استشعار في أي وقت باستخدام batch()
بدون
فقدان بيانات جهاز الاستشعار.
فترة أخذ العينات
ولفترة أخذ العينات معنى مختلف حسب نوع المستشعر قيد تكوينها:
- متواصلة: يتم إنشاء أحداث أدوات الاستشعار بمعدّل متواصل.
- عند التغيير: لا يتم إنشاء الأحداث بسرعة أكبر من فترة أخذ العينات، وقد يتم بمعدل أبطأ من فترة أخذ العينات إذا كانت القيمة التي تم قياسها لا تتغير.
- لقطة واحدة: يتم تجاهل فترة أخذ العينات.
- خاص: لمزيد من التفاصيل، راجِع أنواع أدوات الاستشعار.
لمعرفة المزيد عن التفاعل بين فترة أخذ العينات وجهاز الاستشعار أوضاع إعداد التقارير، راجِع أوضاع إعداد التقارير.
الحد الأقصى لوقت استجابة إعداد التقارير
يحدد الحد الأقصى لوقت استجابة إعداد التقارير الحد الأقصى للوقت بالنانو ثانية يمكن تأخير الأحداث وتخزينها في FIFO للجهاز قبل كتابتها إلى فعالية FMQ من خلال HAL بينما تكون المنظومة على الرقاقة في الوضع النشط.
تشير القيمة صفر إلى أنه يجب الإبلاغ عن الأحداث بمجرد إرسالها قياسها، إما تخطي نموذج FIFO تمامًا، أو إفراغ FIFO بمجرد هناك حدث واحد من جهاز الاستشعار في مقياس FIFO.
على سبيل المثال، عند تفعيل مقياس التسارع بتردد 50 هرتز مع حد أقصى لإعداد التقارير وقت الاستجابة من الصفر أي مشغلات تقاطع 50 مرة في الثانية عندما تكون المنظومة على الرقاقة في الوضع النشط.
عندما يكون الحد الأقصى لوقت استجابة إعداد التقارير أكبر من صفر، لا تكون أحداث أداة الاستشعار يجب الإبلاغ عنها فور رصدها. يمكن أن تكون الأحداث مؤقتًا في جهاز FIFO للجهاز والإبلاغ عنه على دفعات، طالما أنه ليس هناك أي حدث تأخيرًا يتجاوز الحد الأقصى لوقت استجابة إعداد التقارير. جميع الأحداث منذ الدفعة السابقة وإرجاعها مرة واحدة. وهذا يقلل من عدد المقاطعات المرسلة إلى المنظومة على الرقاقة (SoC) وتسمح للمنظومة على الرقاقة بالتبديل إلى وضع الطاقة الأقل بينما تجمع أداة الاستشعار البيانات وتدفعها
ولكل حدث طابع زمني مرتبط به. ويمكن أن يؤدي تأخير الوقت الذي في حال الإبلاغ عن الحدث في الطابع الزمني للحدث. يجب أن يكون الطابع الزمني دقيقة وتتوافق مع الوقت الذي وقع فيه الحدث فعليًا، ووقت الإبلاغ عنه.
للحصول على معلومات ومتطلبات إضافية بشأن الإبلاغ عن أحداث أدوات الاستشعار باستخدام وقت استجابة إعداد التقارير بحد أقصى غير صفري، راجِع التجميع.
تفعيل أدوات الاستشعار
يعمل إطار العمل على تفعيل وإيقاف أدوات الاستشعار باستخدام وظيفة activate()
.
قبل تشغيل جهاز استشعار، يجب أولاً أن يضبط إطار العمل أداة الاستشعار
باستخدام batch()
.
بعد إيقاف أحد أجهزة الاستشعار، يجب ألّا تتم معالجة أحداث أداة الاستشعار الإضافية القادمة من هذا الجهاز. إلى Event FMQ.
أجهزة استشعار تدفق المياه
إذا تم ضبط أداة استشعار لجمع بيانات جهاز الاستشعار معًا، يمكن لإطار العمل أن يفرض
تدفق فوري لأحداث الاستشعار المجمّعة من خلال طلب الرقم flush()
يؤدي هذا إلى
أحداث المستشعر المجمّعة الخاصة بمقبض الاستشعار المحدد على الفور
التي كتبتها إلى Event FMQ. يجب أن تُلحق طبقة تجريد الأجهزة (HAL) بأجهزة الاستشعار حدث تدفق كامل
إلى نهاية أحداث أداة الاستشعار المكتوبة نتيجة استدعاء
flush()
يحدث التدفق بشكل غير متزامن (أي أن هذه الدالة يجب أن تعرض على الفور). إذا كان التنفيذ يستخدم معيار FIFO واحدًا للعديد من أجهزة الاستشعار، فإن FIFO هذا مضغوط ولا تتم إضافة حدث التدفق بالكامل إلا لأداة الاستشعار المحددة.
إذا كان جهاز الاستشعار المحدد لا يتضمن FIFO (لا يمكن التخزين المؤقت)، أو إذا كان FIFO
فارغة في وقت المكالمة، يجب أن ينجح flush()
وأن يرسل تدفقًا
الحدث الكامل لهذا المستشعر. ينطبق هذا على جميع أدوات الاستشعار باستثناء اللقطة الواحدة
أجهزة الاستشعار.
إذا تم استدعاء "flush()
" لاستخدام أداة استشعار بنقرة واحدة، على "flush()
" الرجوع إلى هذه النقطة.
BAD_VALUE
ولم يتم إنشاء حدث كامل.
كتابة بيانات أحداث المستشعر إلى FMQ
يُستخدَم حدث FMQ بواسطة "HAL" لأجهزة الاستشعار لإرسال أحداث أداة الاستشعار إلى Android. إطار عمل جهاز الاستشعار.
إن موقع FMQ هو نظام FMQ متزامن، مما يعني أن أي محاولة لكتابة المزيد على FMQ أكثر من المساحة المتوفرة، مما يسمح بنتائج والكتابة. في هذه الحالة، يجب أن يحدد HAL ما إذا كان سيكتب المجموعة الحالية الأحداث كمجموعتين أصغر من الأحداث أو لكتابة جميع الأحداث معًا عند توفر مساحة كافية.
عندما يكتب المستشعر HAL العدد المطلوب لأحداث الاستشعار
يجب أن يعلم موقع FMQ في أجهزة الاستشعار إطار العمل بأن الأحداث جاهزة من خلال
جارٍ كتابة بت EventQueueFlagBits::READ_AND_PROCESS
إلى Event FMQ
EventFlag::wake
. يمكن إنشاء حدث EventFlag من Event FMQ.
باستخدام "EventFlag::createEventFlag
" وأداة "getEventFlagWord()
" في Event FMQ
الأخرى.
تتوافق أجهزة الاستشعار AIDL HAL مع كلّ من write
وwriteBlocking
في فعالية FMQ.
توفّر عملية التنفيذ التلقائية مرجعًا لاستخدام write
. إذا كانت
يتم استخدام الدالة writeBlocking
، يجب ضبط العلامة readNotification
على
EventQueueFlagBits::EVENTS_READ
، الذي يتم ضبطه من خلال إطار العمل عند قراءة
من فعالية FMQ. يجب ضبط علامة إشعار الكتابة على
EventQueueFlagBits::READ_AND_PROCESS
، التي تُعلِم إطار العمل بأنّ الأحداث
إلى Event FMQ.
أحداث WAKE_UP
أحداث "WAKE_UP
" هي أحداث أداة استشعار تؤدي إلى تنفيذ معالِج التطبيقات (AP)
تستيقظ وتتعامل مع الحدث على الفور. عند كتابة حدث WAKE_UP
إلى حدث FMQ، يجب على HAL لأجهزة الاستشعار تأمين قفل التنشيط لضمان
يظل النظام نشطًا حتى يتمكن إطار العمل من التعامل مع الحدث. عند استلام
WAKE_UP
، يؤمّن إطار العمل قفل التنشيط الخاص به، ما يسمح
أجهزة الاستشعار HAL لإطلاق قفل التنشيط. المزامنة عندما تكون طبقة تجريد الأجهزة (HAL) لأجهزة الاستشعار
فتح قفل التنشيط، يمكنك استخدام Wake Lock FMQ.
يجب أن يقرأ جهاز الاستشعار HAL إشارة Wake Lock FMQ لتحديد عدد WAKE_UP
.
والأحداث التي تعامل معها إطار العمل. يجب أن تفرغ قناة HAL قفل التنشيط فقط.
لأحداث WAKE_UP
إذا كان إجمالي عدد أحداث WAKE_UP
التي لم تتم معالجتها يساوي صفرًا.
بعد التعامل مع أحداث أداة الاستشعار، يحتسب إطار العمل عدد الأحداث
تم وضع علامة عليه تشير إلى أنّه أحداث WAKE_UP
ويكتب هذا الرقم مرة أخرى في Wake Lock FMQ.
يحدّد إطار العمل WakeLockQueueFlagBits::DATA_WRITTEN
قيمة كتابة
على شاشة Wake Lock في FMQ عند كتابة بيانات إلى Wake Lock FMQ.
أدوات الاستشعار الديناميكية
أجهزة الاستشعار الديناميكية هي أجهزة استشعار ليست جزءًا من الجهاز فعليًا ولكن يمكنها أن يُستخدم كإدخال في الجهاز، مثل لوحة ألعاب مزوَّدة بمقياس تسارع.
عند توصيل مستشعر ديناميكي، تعمل onDynamicSensorConnected
في
يجب استدعاء ISensorsCallback
من طبقة تجريد الأجهزة (HAL) لأجهزة الاستشعار. يؤدي ذلك إلى إعلام
إطار عمل المستشعر الديناميكي الجديد ويسمح بالتحكّم في أداة الاستشعار
من خلال إطار العمل وليتم تشغيل أحداث أداة الاستشعار من قِبل العملاء.
وبالمثل، عند فصل أي مستشعر ديناميكي،
يجب تسمية الدالة onDynamicSensorDisconnected
في ISensorsCallback
بهذا الشكل
يمكن لإطار العمل إزالة أي جهاز استشعار لم يعد متاحًا.
قناة مباشرة
القناة المباشرة هي طريقة تشغيل تُكتب فيها أحداث المستشعر إلى
ذاكرة معينة بدلاً من إرسال حدث FMQ الذي يتخطى أجهزة استشعار Android
إطار العمل. على العميل الذي يسجّل قناة مباشرة قراءة أحداث المستشعر
مباشرةً من الذاكرة التي تم استخدامها لإنشاء القناة المباشرة ولن
باستقبال أحداث المستشعر من خلال إطار العمل. configDirectReport()
مماثلة لـ batch()
في التشغيل العادي وتهيئ النظام المباشر
قناة الإبلاغ.
تنشئ الدالتان registerDirectChannel()
وunregisterDirectChannel()
قناة مباشرة جديدة أو تدميرها
أوضاع التشغيل
تسمح الوظيفة setOperationMode()
لإطار العمل بضبط أداة استشعار
بحيث يمكن لإطار العمل حقن بيانات المستشعر في المستشعر. هذا مفيد
لاختبارها، خاصةً للخوارزميات الموجودة أسفل إطار العمل.
تُستخدَم الدالة injectSensorData()
عادةً للدفع التشغيلي
المعامل في طبقة تجريد الأجهزة (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 لمستشعرات AIDL HAL في
hardware/interfaces/sensors/aidl/vts/.
وتضمن هذه الاختبارات تنفيذ طبقة تجريد الأجهزة (HAL) لأجهزة الاستشعار بشكل صحيح وأن جميع
تم استيفاء المتطلبات في ISensors.aidl
وISensorsCallback.aidl
بشكل صحيح.
تهيئة HAL
يجب دعم الدالة initialize()
لإنشاء FMQ بين
إطار العمل وHAL.
عرض أجهزة الاستشعار المتاحة
في أجهزة الاستشعار AIDL HAL، يجب أن تعرض الدالة getSensorsList()
القيمة نفسها.
أثناء تشغيل جهاز واحد، حتى تتم إعادة تشغيل طبقة تجريد الأجهزة (HAL) في أجهزة الاستشعار. متطلب جديد
في الدالة getSensorsList()
هو أنها يجب أن تعرض نفس القيمة أثناء
تشغيل جهاز واحد، حتى تتم إعادة تشغيل طبقة تجريد الأجهزة (HAL) في أجهزة الاستشعار. يسمح هذا
لمحاولة إعادة إنشاء اتصالات جهاز الاستشعار إذا كان خادم النظام
تتم إعادة تشغيله. يمكن أن تتغيّر القيمة التي يعرضها getSensorsList()
بعد تشغيل الجهاز.
إعادة تشغيل الجهاز.
كتابة بيانات أحداث المستشعر إلى FMQ
بدلاً من الانتظار حتى يتم طلب "poll()
"، يمكنك الانتقال إلى مجموعة أدوات الاستشعار AIDL HAL التي توفّرها أجهزة الاستشعار.
يجب أن يكتب فريق HAL بشكل استباقي أحداث أداة الاستشعار في أداة FMQ عند رصد أي أحداث أجهزة الاستشعار.
المتوفرة. ويكون HAL مسؤول أيضًا عن كتابة وحدات البت الصحيحة
EventFlag
لإحداث قراءة FMQ ضمن إطار العمل.
أحداث WAKE_UP
في أجهزة الاستشعار HAL 1.0، تمكنت قناة HAL من فتح قفل التنشيط لأي WAKE_UP
.
الحدث في أي مكالمة لاحقة مع "poll()
" بعد نشر WAKE_UP
في
poll()
لأنّ ذلك أشار إلى أنّ إطار العمل قد عالج جميع أدوات الاستشعار.
الأحداث وحصلوا على قفل تنشيط، إذا لزم الأمر. لأن، في أدوات الاستشعار AIDL
HAL، لن يتم إشعار HAL بعد الآن عند معالجة إطار العمل للأحداث
إلى FMQ، فإن Wake Lock FMQ يتيح لإطار العمل الاتصال
HAL عند التعامل مع WAKE_UP
حدث.
في مجموعة أجهزة الاستشعار AIDL HAL، يتم تأمين قفل التنشيط بواسطة طبقة تجريد الأجهزة (HAL) لأجهزة الاستشعار في WAKE_UP
.
يجب أن تبدأ الأحداث بـ SensorsHAL_WAKEUP
.
أدوات الاستشعار الديناميكية
تم إرجاع أجهزة الاستشعار الديناميكية باستخدام الوظيفة poll()
في أجهزة الاستشعار HAL 1.0.
تتطلب أجهزة الاستشعار AIDL HAL أن يكون onDynamicSensorsConnected
سيتم استدعاء الدالة onDynamicSensorsDisconnected
في ISensorsCallback
عندما تكون ديناميكية
تغيرت توصيلات جهاز الاستشعار. تتوفر عمليات معاودة الاتصال هذه كجزء من
مؤشر ISensorsCallback
الذي يتم توفيره من خلال الدالة initialize()
.
أوضاع التشغيل
يجب توفير الوضع DATA_INJECTION
لأجهزة استشعار WAKE_UP
.
التوافق مع بروتوكولات HAL المتعددة
تتوافق أجهزة الاستشعار AIDL HAL مع طبقة تجريد الأجهزة (HAL) المتعددة باستخدام إطار عمل أجهزة الاستشعار المتعددة HAL. بالنسبة تفاصيل التنفيذ، راجع نقل البيانات من أجهزة الاستشعار HAL 2.1.