إهمال إصدار 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,

fifoReservEventCount : إذا لم يتم تنفيذ التجميع ، فاضبط هذا على 0.

fifoMaxEventCount : إذا لم يتم تنفيذ التجميع ، فاضبط هذا على 0

stringType : اضبط على 0 لجميع مستشعرات android الرسمية (تلك المحددة في المستشعرات. 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 بت فقط لأسباب التوافق الثنائي.

الإشارات : يحدد هذا الحقل وضع الإبلاغ للمستشعر وما إذا كان المستشعر هو مستشعر تنبيه.

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