حالت های گزارش

حسگرها می‌توانند رویدادها را به روش‌های مختلفی که حالت‌های گزارش‌دهی نامیده می‌شوند، تولید کنند؛ هر نوع حسگر فقط و فقط یک حالت گزارش‌دهی مرتبط با خود دارد. چهار حالت گزارش‌دهی وجود دارد.

پیوسته

رویدادها با نرخ ثابتی تولید می‌شوند که توسط پارامتر sampling_period_ns که به تابع batch ارسال می‌شود، تعریف می‌شود. حسگرهای نمونه‌ای که از حالت گزارش‌دهی پیوسته استفاده می‌کنند، شتاب‌سنج‌ها و ژیروسکوپ‌ها هستند.

در حال تغییر

رویدادها فقط در صورتی ایجاد می‌شوند که مقادیر اندازه‌گیری شده تغییر کرده باشند. فعال کردن سنسور در سطح HAL (فراخوانی activate(..., enable=1) روی آن) نیز باعث ایجاد یک رویداد می‌شود، به این معنی که HAL باید بلافاصله پس از فعال شدن یک سنسور در حال تغییر، یک رویداد را برگرداند. سنسورهای نمونه‌ای که از حالت گزارش‌دهی در حال تغییر استفاده می‌کنند، انواع سنسور گام‌شمار، مجاورتی و ضربان قلب هستند.

پارامتر sampling_period_ns که به تابع batch ارسال می‌شود، برای تنظیم حداقل زمان بین رویدادهای متوالی استفاده می‌شود، به این معنی که یک رویداد نباید تا زمانی که sampling_period_ns نانوثانیه از آخرین رویداد نگذشته باشد، تولید شود، حتی اگر مقدار از آن زمان تغییر کرده باشد. اگر مقدار تغییر کند، یک رویداد باید به محض سپری شدن sampling_period_ns از آخرین رویداد تولید شود.

برای مثال، فرض کنید:

  • ما شمارنده پله را با sampling_period_ns = 10 * 10^9 (10 ثانیه) فعال می‌کنیم.
  • ما ۵۵ ثانیه راه می‌رویم، سپس به مدت یک دقیقه بی‌حرکت می‌ایستیم.
  • این رویدادها تقریباً هر ۱۰ ثانیه در دقیقه اول (از جمله در زمان t=0 به دلیل فعال شدن سنسور و t=60 ثانیه) ایجاد می‌شوند، که در مجموع هفت رویداد می‌شود. در دقیقه دوم هیچ رویدادی ایجاد نمی‌شود زیرا مقدار شمارش گام پس از t=60 ثانیه تغییر نکرده است.

تک‌ضرب

پس از تشخیص یک رویداد، حسگر خود را غیرفعال می‌کند و سپس یک رویداد واحد را از طریق HAL ارسال می‌کند. برای جلوگیری از شرایط رقابتی، سفارش مهم است. (سنسور باید قبل از گزارش رویداد از طریق HAL غیرفعال شود). هیچ رویداد دیگری تا زمانی که حسگر دوباره فعال نشود، ارسال نمی‌شود. حرکت قابل توجه نمونه‌ای از این نوع حسگر است.

حسگرهای تک‌شات گاهی اوقات به عنوان حسگرهای ماشه شناخته می‌شوند.

پارامترهای sampling_period_ns و max_report_latency_ns که به تابع batch ارسال می‌شوند، نادیده گرفته می‌شوند. رویدادهای حاصل از رویدادهای یک‌باره را نمی‌توان در FIFOهای سخت‌افزاری ذخیره کرد؛ رویدادها باید به محض تولید گزارش شوند.

ویژه

برای جزئیات بیشتر در مورد زمان تولید رویدادها، به توضیحات مربوط به هر نوع حسگر مراجعه کنید.