در نسخه 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
نامیده می شود.