Датчики могут генерировать события разными способами, которые называются режимами передачи данных. Каждый тип датчика связан только с одним режимом передачи данных. Существует четыре режима создания отчетов.
Непрерывный
События генерируются с постоянной скоростью, заданной параметром 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-буферах оборудования. Их нужно регистрировать сразу после создания.
Специальные события
Подробные сведения о том, когда генерируются события, можно найти в описаниях отдельных типов датчиков.