إيقاف إصدار HAL نهائيًا

في الإصدار L من Android، سنوقف دعم بعض إصدارات HAL لأجهزة الاستشعار. الإصداران الوحيدان المتوافقان هما SENSORS_DEVICE_API_VERSION_1_0 وSENSORS_DEVICE_API_VERSION_1_3.

وفي الإصدارات التالية، من المحتمل أن نوقف أيضًا استخدام الإصدار 1_0.

لا يتضمّن الإصدار 1_0 مفهوم تجميع البيانات. يجب ترقية جميع الأجهزة التي تستخدم الإصدار 1_0 إلى الإصدار 1_3 إن أمكن.

يعاني الإصداران 1_1 و1_2 من تعريف ضعيف لمفهوم الحِزم، ولم يعُد متوافقَين.

يجب ترقية جميع الأجهزة التي تستخدم حاليًا الإصدار 1_1 أو 1_2 إلى الإصدار 1_3.

في الإصدار 1_3، سهّلنا مفهوم تجميع البيانات، وقدّمنا ميزة "استيقاظ الأجهزة".

للترقية إلى الإصدار 1_3، اتّبِع التغييرات الواردة أدناه.

تنفيذ الدالة "المعالجة المجمّعة"

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

في حال عدم تنفيذ ميزة تجميع البيانات، يمكنك تنفيذ batch من خلال استدعاء الدالة setDelay الحالية باستخدام المَعلمة sampling_period_ns المقدَّمة.

تنفيذ وظيفة "إخلاء الذاكرة"

حتى إذا لم تنفِّذ ميزة تجميع البيانات، عليك تنفيذ الدالة flush.

في حال عدم تنفيذ ميزة تجميع البيانات، يجب أن يُنشئ flush حدثًا واحدًا من نوع META_DATA_FLUSH_COMPLETE ويعرض القيمة 0 (نجاح).

تغيير sensors_poll_device_t.common.version

your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3

إضافة الحقول الجديدة إلى تعريف أدوات الاستشعار

عند تحديد كل أداة استشعار، بالإضافة إلى حقول sensor_t المعتادة، يجب مراعاة ما يلي:

.name =       "My magnetic field Sensor",
.vendor =     "My company",
.version
=    1,
.handle =     mag_handle,
.type =       SENSOR_TYPE_MAGNETIC_FIELD,
.maxRange =   200.0f,
.resolution = CONVERT_M,
.power =      5.0f,
.minDelay =
 16667,

يجب أيضًا ضبط الحقول الجديدة، المحدّدة بين 1_0 و1_3:

.fifoReservedEventCount = 0,
.fifoMaxEventCount =   0,
.stringType =         0,
.requiredPermission = 0,
.maxDelay =      200000
.flags =
SENSOR_FLAG_CONTINUOUS_MODE,

fifoReservedEventCount: في حال عدم تنفيذ ميزة تجميع البيانات، اضبط هذه القيمة على 0.

fifoMaxEventCount: في حال عدم تنفيذ ميزة تجميع البيانات، اضبط هذه القيمة على 0.

stringType: يتم ضبطه على 0 لجميع أدوات استشعار Android الرسمية (تلك المحدّدة فيملف ‎ sensors.h)، لأنّ إطار العمل سيستبدل هذه القيمة. بالنسبة إلى أجهزة الاستشعار غير الرسمية، يمكنك الاطّلاع على sensor_t للحصول على تفاصيل حول كيفية ضبطها.

requiredPermission: هذا هو الإذن الذي يجب أن تحصل عليه التطبيقات للحصول على إذن الوصول إلى جهاز الاستشعار. يمكنك عادةً ضبط هذا الإعداد على 0 لجميع أدوات الاستشعار، ولكن يجب ضبطه على SENSOR_PERMISSION_BODY_SENSORS. لأدوات الاستشعار من النوع HEART_RATE.

maxDelay: هذه القيمة مهمة وعليك ضبطها وفقًا لإمكانات أداة الاستشعار وبرنامج تشغيلها.

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

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

تنطبق الأحكام التالية على period_ns وmaxDelay وminDelay:

  • يتم قياس period_ns بالنانو ثانية، في حين يتم قياس maxDelay/minDelay بالميكرو ثانية.
  • يجب أن تتوافق maxDelay دائمًا مع عدد صحيح موقَّع 32 بت. ويتم تحديده على أنّه 64 بت على البنى الأساسية بإصدار 64 بت فقط لأسباب تتعلّق بالتوافق مع الملفات الثنائية.

flags: يحدِّد هذا الحقل وضع إعداد التقارير الخاص بجهاز الاستشعار وما إذا كان جهاز الاستشعار جهاز استشعار للتنشيط.

إذا كنت لا تطبّق ميزة تجميع البيانات، وكنت بصدد الانتقال من الإصدار 1.0 إلى الإصدار 1.3، اضبط هذه القيمة على:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE لأجهزة الاستشعار لمرة واحدة

SENSOR_FLAG_CONTINUOUS_MODE لأجهزة الاستشعار المستمرة SENSOR_FLAG_ON_CHANGE_MODE لأجهزة الاستشعار عند التغيير باستثناء القرب SENSOR_FLAG_SPECIAL_REPORTING_MODE لأجهزة الاستشعار التي تتضمّن وضع إعداد تقارير خاصًا باستثناء كاشف الميل

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE لأداة استشعار التقارب وأداة استشعار كاشف الميل الرسمية من Android

ملاحظات عند الترقية من الإصدار 1_1 أو 1_2

  • تنجح الدالة batch الآن في معظم الأحيان، حتى مع أجهزة الاستشعار التي لا تتيح المعالجة المجمّعة، بغض النظر عن قيمة وسيطة مهلة الانتظار. الحالات الوحيدة التي قد تتعذّر فيها الدالة batch هي الأخطاء الداخلية أو استخدام قيمة sensor_handle, أو sampling_period_ns أو max_report_latency_ns سالبة غير صالحة.
  • يتم تحديد ما إذا كان أداة الاستشعار تتيح تجميع البيانات استنادًا إلى ما إذا كانت قيمة fifoMaxEventCount أكبر من 0. (في الإصدارات السابقة، كان يستند إلى القيمة المعروضة في batch()).
  • إنّ أجهزة الاستشعار التي تتيح تجميع البيانات تكون دائمًا في ما أطلقنا عليه "وضع التجميع" في الإصدارات السابقة: حتى إذا كانت المَعلمة max_report_latency_ns تساوي 0، يجب أن يظلّ جهاز الاستشعار مجمّعًا، ما يعني أنّه يجب تخزين الأحداث في قائمة "الأول ثمّ الآخر" عندما ينتقل نظام التشغيل المتكامل إلى وضع التعليق.
  • لم يعُد يتم استخدام المَعلمة flags لدالة batch. تم إيقاف دالتَي DRY_RUN وWAKE_UPON_FIFO_FULL نهائيًا، ولن يتم تمريرها مطلقًا إلى دالة batch.
  • يُشار الآن إلى وسيطة مهلة الحِزم باسم وسيطة max_report_latency.