传感器可以通过不同的方式(称为报告模式)生成事件;每种传感器类型都有一种且仅有一种与之关联的报告模式。存在四种报告模式。
连续
事件以恒定速率生成,该速率由传递给 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_ns
和 max_report_latency_ns
参数将被忽略。来自单次事件的事件无法存储在硬件 FIFO 中;事件必须在生成后立即报告。
特殊
有关事件何时生成的详细信息,请参阅各个传感器类型说明。