センサーは、レポートモードと呼ばれるさまざまな方法でイベントを生成できます。各センサータイプには、レポートモードが 1 つだけ関連付けられています。レポートモードには 4 つの種類があります。
連続
batch 関数に渡される sampling_period_ns パラメータで定義された一定の頻度でイベントが生成されます。連続レポートモードを使用するセンサーには、加速度計やジャイロスコープなどがあります。
変化時
測定値が変化した場合のみイベントが生成されます。
HAL レベルでセンサーをアクティブにする(HAL レベルで activate(..., enable=1) を呼び出す)と、イベントもトリガーされます。つまり、変化時センサーがアクティブになったら HAL は直ちにイベントを返す必要があります。変化時レポートモードを使用するセンサーには、歩数計、近接センサー、心拍数センサータイプなどがあります。
batch 関数に渡される sampling_period_ns パラメータは、連続するイベント間の最小時間を設定するために使用されます。つまり、最後のイベント以降に値が変化しても、最後のイベントからの経過時間が sampling_period_ns ナノ秒に達していなければ、イベントは生成されません。値が変化した場合、最後のイベントからの経過時間が sampling_period_ns に達したらすぐにイベントが生成される必要があります。
次のような例を考えてみましょう。
- 歩数計を
sampling_period_ns = 10 * 10^9(10 秒)で有効にします。 - 55 秒間歩いてから 1 分間立ち止まります。
- 最初の 1 分間(センサー有効化のための
t=0の時点とt=60秒を含む)には、10 秒ごとに合計 7 つのイベントが生成されます。t=60秒以降は歩数計の値が変化しなかったため、次の 1 分間はイベントが生成されません。
ワンショット
イベントが検出されると、センサーは無効になり、HAL を介して単一のイベントを送信します。競合状態を避けるためには順番が重要です(センサーは、HAL を介してイベントを報告する前に無効になる必要があります)。センサーが再度有効になるまで、他のイベントは送信されません。 この種類のセンサーには、大きなモーション センサーなどがあります。
ワンショット センサーは、トリガー センサーと呼ばれることもあります。
batch 関数に渡される sampling_period_ns および max_report_latency_ns パラメータは無視されます。ワンショット イベントからのイベントはハードウェア FIFO に格納できません。イベントは生成後すぐにレポートされる必要があります。
特別
イベントが生成されるタイミングの詳細については、個々のセンサータイプの説明をご覧ください。