إهمال إصدار 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 للحصول على تفاصيل حول كيفية ضبطها.

الإذن المطلوب : هذا هو الإذن الذي سيُطلب من التطبيقات الحصول عليه للوصول إلى المستشعر الخاص بك. يمكنك عادةً ضبط هذا على 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 .