Czujniki mogą generować zdarzenia na różne sposoby, zwane trybami raportowania. Każdy typ czujnika ma przypisany tylko jeden tryb raportowania. Dostępne są 4 tryby raportowania.
Ciągły
Zdarzenia są generowane ze stałą częstotliwością określoną przez parametr sampling_period_ns
przekazywany do funkcji batch
. Przykładem czujników korzystających z trybu ciągłego raportowania są akcelerometry i żyroskopy.
Przy zmianie
Zdarzenia są generowane tylko wtedy, gdy zmierzone wartości uległy zmianie.
Aktywowanie czujnika na poziomie HAL (wywoływanie na nim funkcji activate(..., enable=1)
) również wywołuje zdarzenie, co oznacza, że HAL musi natychmiast zwrócić zdarzenie, gdy aktywowany jest czujnik zmiany. Przykładami czujników korzystających z trybu raportowania zmian są krokomierz, czujnik zbliżeniowy i czujnik tętna.
Parametr
sampling_period_ns
przekazywany do funkcji batch
służy do ustawiania minimalnego czasu między kolejnymi zdarzeniami. Oznacza to, że zdarzenie nie powinno być generowane, dopóki od ostatniego zdarzenia nie upłynie sampling_period_ns
nanosekund, nawet jeśli wartość od tego czasu uległa zmianie. Jeśli wartość się zmieniła, zdarzenie musi zostać wygenerowane, gdy od ostatniego zdarzenia upłynie czas sampling_period_ns
.
Załóżmy na przykład, że:
- Aktywujemy licznik kroków za pomocą
sampling_period_ns = 10 * 10^9
(10 sekund). - Chodzimy przez 55 sekund, a potem stoimy przez minutę.
- Zdarzenia są generowane co około 10 sekund w pierwszej minucie (w tym w czasie
t=0
z powodu aktywacji czujnika it=60
sekund), co daje łącznie 7 zdarzeń. W drugiej minucie nie jest generowane żadne zdarzenie, ponieważ wartość liczby kroków nie zmieniła się po upływiet=60
sekund.
One-shot
Po wykryciu zdarzenia czujnik wyłącza się, a następnie wysyła pojedyncze zdarzenie przez HAL. Kolejność ma znaczenie, aby uniknąć sytuacji wyścigu. (Czujnik musi zostać dezaktywowany, zanim zdarzenie zostanie zgłoszone za pomocą HAL). Dopóki czujnik nie zostanie ponownie aktywowany, nie będzie wysyłane żadne inne zdarzenie. Przykładem takiego czujnika jest znaczący ruch.
Czujniki jednorazowe są czasami nazywane czujnikami wyzwalającymi.
Parametry sampling_period_ns
i max_report_latency_ns
przekazywane do funkcji batch
są ignorowane. Zdarzenia
z jednorazowych zdarzeń nie mogą być przechowywane w sprzętowych kolejkach FIFO. Muszą być zgłaszane
natychmiast po wygenerowaniu.
Specjalny
Szczegółowe informacje o tym, kiedy generowane są zdarzenia, znajdziesz w opisach poszczególnych rodzajów czujników.