في الإصدار 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
.