Czujniki mogą generować zdarzenia na różne sposoby, czyli w różnych trybach raportowania. Każdy typ czujnika ma powiązany tylko jeden tryb raportowania. Istnieją 4 tryby raportowania.
Ciągły
Zdarzenia są generowane z stałym tempem określonym przez parametr sampling_period_ns
przekazany do funkcji batch
. Przykładowe czujniki, które używają trybu raportowania ciągłego, to akcelerometry i żyroskopy.
W trakcie zmiany
Zdarzenia są generowane tylko wtedy, gdy zmienią się zmierzone wartości.
Aktywowanie czujnika na poziomie HAL (wywołanie za jego pomocą parametru activate(..., enable=1)
) także wywołuje zdarzenie, co oznacza, że HAL musi zwrócić zdarzenie natychmiast po aktywowaniu czujnika zmiany. Przykładami czujników używających trybu raportowania po zmianie są typy czujników: licznik kroków, czujnik zbliżeniowy i czujnik tętna.
Parametr sampling_period_ns
przekazany funkcji batch
służy do ustawiania minimalnego czasu między kolejnymi zdarzeniami, co oznacza, że zdarzenie nie zostanie wygenerowane, dopóki nie upłynie sampling_period_ns
nanosekund od ostatniego zdarzenia, nawet jeśli wartość zmieniła się od tego czasu. Jeśli wartość się zmieniła, zdarzenie musi zostać wygenerowane, gdy od ostatniego zdarzenia upłynie sampling_period_ns
.
Załóżmy na przykład:
- Aktywujemy licznik kroków za pomocą
sampling_period_ns = 10 * 10^9
(10 sekund). - Idziemy przez 55 sekund, a potem stoimy przez minutę.
- Zdarzenia są generowane co około 10 sekund w ciągu pierwszej minuty (w tym w czasie
t=0
sekund z powodu aktywacji czujnika it=60
sekund), co daje w sumie 7 zdarzeń. W drugiej minucie nie jest generowane żadne zdarzenie, ponieważ wartość liczby kroków nie zmieniła się pot=60
sekundach.
Jednorazowe
Po wykryciu zdarzenia czujnik dezaktywuje się, a następnie wysyła pojedyncze zdarzenie przez HAL. Kolejność ma znaczenie, aby uniknąć wyścigów. (przed zgłoszeniem zdarzenia przez HAL czujnik musi zostać dezaktywowany). Do momentu ponownej aktywacji czujnika nie jest wysyłane żadne inne zdarzenie. Przykładem czujnika tego rodzaju 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 typu „jednorazowe” nie mogą być przechowywane w sprzętowych identyfikatorach FIFO; zdarzenia muszą być zgłaszane od razu po ich wygenerowaniu.
Specjalny
Szczegółowe informacje o tym, kiedy są generowane zdarzenia, znajdziesz w opisach poszczególnych typów czujników.