Czujniki mogą generować zdarzenia na różne sposoby, zwane trybami raportowania; z każdym typem czujnika powiązany jest jeden i tylko jeden tryb raportowania. Istnieją cztery tryby raportowania.
Ciągły
Zdarzenia są generowane ze stałą szybkością określoną przez parametr sampling_period_ns
przekazywany do funkcji batch
. Przykładowymi czujnikami wykorzystującymi tryb ciągłego raportowania są akcelerometry i żyroskopy .
Przy zmianie
Zdarzenia są generowane tylko wtedy, gdy mierzone wartości uległy zmianie. Aktywacja czujnika na poziomie HAL (wywołanie na nim activate(..., enable=1)
) również wyzwala zdarzenie, co oznacza, że HAL musi zwrócić zdarzenie natychmiast po aktywacji czujnika przy zmianie. Przykładowe czujniki korzystające z trybu raportowania przy zmianie to licznik kroków, czujnik zbliżeniowy i czujnik tętna.
Parametr sampling_period_ns
przekazany do funkcji batch
służy do ustawienia minimalnego czasu między kolejnymi zdarzeniami, co oznacza, że zdarzenie nie powinno być generowane, 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ść uległa zmianie, zdarzenie musi zostać wygenerowane, gdy tylko upłynie czas sampling_period_ns
od ostatniego zdarzenia.
Załóżmy na przykład:
- Licznik kroków aktywujemy parametrem
sampling_period_ns = 10 * 10^9
(10 sekund). - Idziemy przez 55 sekund, potem stoimy przez minutę.
- Zdarzenia są generowane co około 10 sekund w ciągu pierwszej minuty (wliczając w to czas
t=0
z powodu aktywacji czujnika it=60
sekund), łącznie siedem zdarzeń. Żadne zdarzenie nie jest generowane w drugiej minucie, ponieważ wartość liczby kroków nie zmieniła się pot=60
sekundach.
Jeden strzał
Po wykryciu zdarzenia czujnik dezaktywuje się, a następnie wysyła pojedyncze zdarzenie za pośrednictwem warstwy HAL. Porządkuj sprawy, aby uniknąć warunków wyścigowych. (Czujnik musi zostać dezaktywowany przed zgłoszeniem zdarzenia przez HAL). Żadne inne zdarzenie nie jest wysyłane, dopóki czujnik nie zostanie ponownie aktywowany. Przykładem takiego czujnika jest znaczący ruch .
Czujniki jednostrzałowe są czasami nazywane czujnikami wyzwalającymi.
Parametry sampling_period_ns
i max_report_latency_ns
przekazane do funkcji batch
są ignorowane. Zdarzenia ze zdarzeń jednorazowych nie mogą być przechowywane w sprzętowych FIFO; zdarzenia muszą być zgłaszane natychmiast po ich wygenerowaniu.
Specjalny
Szczegółowe informacje na temat generowania zdarzeń można znaleźć w opisach poszczególnych typów czujników .