报告模式

传感器可以通过不同的方式(称为报告模式)生成事件;每种传感器类型都有一种且仅有一种与之关联的报告模式。存在四种报告模式。

连续

事件以恒定速率生成,该速率由传递给 batch 函数的 sampling_period_ns 参数定义。使用连续报告模式的传感器示例包括加速度计陀螺仪

OnChange(变化时)

仅当测量值发生变化时才会生成事件。在 HAL 级别激活传感器(对其调用 activate(..., enable=1))也会触发事件,这意味着当 on-change 传感器被激活时,HAL 必须立即返回一个事件。使用 on-change 报告模式的传感器示例包括步数计数器、接近传感器和心率传感器类型。

传递给 batch 函数的 sampling_period_ns 参数用于设置连续事件之间的最短时间,这意味着即使自上次事件以来值已更改,也不应生成事件,直到自上次事件以来经过 sampling_period_ns 纳秒。如果值已更改,则必须在自上次事件以来经过 sampling_period_ns 后立即生成事件。

例如,假设:

  • 我们使用 sampling_period_ns = 10 * 10^9(10 秒)激活步数计数器。
  • 我们走了 55 秒,然后静止站立一分钟。
  • 事件在大约每 10 秒生成一次,在第一分钟内(包括在时间 t=0 时,因为传感器的激活,以及 t=60 秒),总共七个事件。第二分钟内没有生成任何事件,因为在 t=60 秒后步数计数的值没有改变。

One-shot(单次)

检测到事件后,传感器会停用自身,然后通过 HAL 发送单个事件。顺序很重要,以避免竞争条件。(必须在通过 HAL 报告事件之前停用传感器)。在传感器重新激活之前,不会发送其他事件。显著运动就是这种传感器的一个示例。

单次传感器有时也称为触发传感器。

传递给 batch 函数的 sampling_period_nsmax_report_latency_ns 参数将被忽略。来自单次事件的事件无法存储在硬件 FIFO 中;事件必须在生成后立即报告。

特殊

有关事件何时生成的详细信息,请参阅各个传感器类型说明