Датчики могут генерировать события различными способами, называемыми режимами отчетности; каждый тип датчика имеет один и только один режим отчетности, связанный с ним. Существует четыре режима отчетности.
Непрерывный
События генерируются с постоянной частотой, определяемой параметром 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 секунд). - Мы идем 55 секунд, затем стоим одну минуту.
- События генерируются примерно каждые 10 секунд в течение первой минуты (включая время
t=0
из-за активации датчика иt=60
секунд), всего семь событий. Во вторую минуту событие не генерируется, поскольку значение счетчика шагов не изменилось послеt=60
секунд.
Один выстрел
При обнаружении события датчик деактивируется, а затем отправляет одно событие через HAL. Порядок имеет значение, чтобы избежать условий гонки. (Датчик должен быть деактивирован до того, как о событии будет сообщено через HAL). Никакие другие события не отправляются, пока датчик не будет повторно активирован. Значительное движение является примером такого датчика.
Однократные датчики иногда называют триггерными датчиками.
Параметры sampling_period_ns
и max_report_latency_ns
, переданные в batch
функцию, игнорируются. События одноразовых событий не могут храниться в аппаратных FIFO; о событиях необходимо сообщать, как только они сгенерированы.
Специальный
Подробные сведения о том, когда генерируются события, см. в описаниях отдельных типов датчиков .