منسوخ شدن نسخه HAL

در نسخه L اندروید، ما پشتیبانی از برخی از نسخه‌های 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 دیگر فراخوانی نخواهد شد.

اگر بچینگ را پیاده سازی نمی کنید، می توانید با فراخوانی تابع setDelay موجود خود با پارامتر sampling_period_ns ارائه شده، batch پیاده سازی کنید.

تابع فلاش را اجرا کنید

حتی اگر بچینگ را پیاده سازی نکنید، باید تابع 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 : برای همه حسگرهای رسمی اندروید (آنهایی که در sensors.h تعریف شده اند) روی 0 تنظیم کنید، زیرا این مقدار توسط چارچوب بازنویسی می شود. برای حسگرهای غیر رسمی، برای جزئیات نحوه تنظیم آن به sensor_t مراجعه کنید.

requirePermission : این مجوزی است که برنامه ها برای دسترسی به حسگر شما باید داشته باشند. معمولاً می‌توانید این را برای همه حسگرهای خود روی 0 تنظیم کنید، اما حسگرهایی با نوع HEART_RATE باید آن را روی SENSOR_PERMISSION_BODY_SENSORS.

maxDelay : این مقدار مهم است و شما باید آن را با توجه به قابلیت های سنسور و درایور آن تنظیم کنید.

این مقدار فقط برای سنسورهای پیوسته و در حال تغییر تعریف شده است. تأخیر بین دو رویداد حسگر مربوط به کمترین فرکانسی است که این سنسور پشتیبانی می کند. هنگامی که فرکانس های پایین تر از طریق تابع batch درخواست می شوند، رویدادها در این فرکانس تولید می شوند. فریمورک یا برنامه‌ها می‌توانند از آن برای تخمین زمان پر شدن 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 باشد، حسگر همچنان باید دسته‌بندی شود، به این معنی که وقتی SoC به حالت تعلیق می‌رود، رویدادها باید در FIFO ذخیره شوند. .
  • پارامتر flags تابع batch دیگر استفاده نمی شود. DRY_RUN و WAKE_UPON_FIFO_FULL هر دو منسوخ شده اند و هرگز به تابع batch منتقل نمی شوند.
  • آرگومان batch timeout اکنون به عنوان آرگومان max_report_latency نامیده می شود.