Czujniki mogą generować zdarzenia na różne sposoby, zwane trybami raportowania; z każdym typem czujnika jest powiązany 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 .
Na zmianę
Zdarzenia są generowane tylko w przypadku zmiany wartości mierzonych. Aktywacja czujnika na poziomie HAL (wywołanie activate(..., enable=1)
na nim) również wyzwala zdarzenie, co oznacza, że HAL musi zwrócić zdarzenie natychmiast po aktywacji czujnika zmiany. Przykładowymi czujnikami korzystającymi z trybu raportowania o zmianie są licznik kroków, czujnik zbliżeniowy i czujnik tętna.
Parametr sampling_period_ns
przekazywany do funkcji batch
służy do ustawienia minimalnego czasu pomiędzy kolejnymi zdarzeniami, co oznacza, że zdarzenie nie powinno być generowane dopóki od ostatniego zdarzenia nie upłynie nanosekund sampling_period_ns
, nawet jeśli wartość uległa zmianie od tego czasu. Jeżeli wartość uległa zmianie, zdarzenie musi zostać wygenerowane natychmiast po upływie sampling_period_ns
od ostatniego zdarzenia.
Załóżmy na przykład:
- Aktywujemy licznik kroków za pomocą
sampling_period_ns = 10 * 10^9
(10 sekund). - Idziemy przez 55 sekund, a następnie stoimy w miejscu na minutę.
- Zdarzenia są generowane co około 10 sekund w ciągu pierwszej minuty (w tym w czasie
t=0
z powodu aktywacji czujnika orazt=60
sekund), co daje w sumie siedem zdarzeń. W drugiej minucie nie zostanie wygenerowane żadne zdarzenie, ponieważ wartość licznika kroków nie uległa zmianie pot=60
sekundach.
Jeden strzał
Po wykryciu zdarzenia czujnik sam się dezaktywuje, a następnie wysyła pojedyncze zdarzenie przez warstwę HAL. Uporzą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 do czasu ponownej aktywacji czujnika. Przykładem tego rodzaju 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 ze zdarzeń jednorazowych nie mogą być przechowywane w sprzętowych FIFO; zdarzenia należy zgłaszać natychmiast po ich wygenerowaniu.
Specjalny
Szczegółowe informacje o tym, kiedy generowane są zdarzenia, można znaleźć w opisach poszczególnych typów czujników .