إيقاف إصدار 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_3 على جميع الأجهزة التي تستخدم حاليًا الإصدار 1_1 أو 1_2.

في 1_3، بسّطنا مفهوم التجميع وأطلقنا ميزة التنشيط أجهزة الاستشعار.

للترقية إلى 1_3، اتبع التغييرات المدرجة أدناه.

تنفيذ الدالة الدفعة

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

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

تنفيذ دالة التدفق

حتى في حال عدم تنفيذ التجميع العنقودي، يجب تنفيذ flush.

في حال عدم تنفيذ التجميع، على flush إنشاء واحد. حدث META_DATA_FLUSH_COMPLETE وعرض 0 (نجاح).

تغيير أدوات الاستشعار_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 الرسمية (التي تم تحديدها في installs.h)، حيث سيتم استبدال هذه القيمة بإطار العمل. بالنسبة أدوات استشعار غير رسمية، يمكنك الاطّلاع على sensor_t تفاصيل حول كيفية إعداده.

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

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، يجب أن تكون أداة الاستشعار مجمّعة، أي يجب أن تكون الأحداث بتخزينها في FIFO عند انتقال المنظومة على الرقاقة إلى وضع التعليق.
  • معلمة flags للدالة batch هي لم تعد مستخدمة بعد الآن. DRY_RUN وWAKE_UPON_FIFO_FULL هي سيتم إيقافهما نهائيًا ولن يتم تمريرهما مطلقًا إلى الدالة batch.
  • يشار الآن إلى وسيطة مهلة الدفعة باسم الوسيطة max_report_latency.