Sensoren können Ereignisse auf unterschiedliche Weise generieren, die als Berichtsmodi bezeichnet werden. Jedem Sensortyp ist genau ein Berichtsmodus zugeordnet. Es gibt vier Berichtsmodi.
Kontinuierlich
Ereignisse werden mit einer konstanten Rate generiert, die durch den Parameter sampling_period_ns
definiert wird, der an die Funktion batch
übergeben wird. Beispielsensoren
wenn Sie den Modus für
kontinuierliche Berichte verwenden,
Beschleunigungsmesser
und Gyroskope.
Bei Änderung
Ereignisse werden nur generiert, wenn sich die gemessenen Werte geändert haben.
Wenn der Sensor auf HAL-Ebene aktiviert wird (activate(..., enable=1)
wird darauf aufgerufen), wird auch ein Ereignis ausgelöst. Das bedeutet, dass die HAL sofort ein Ereignis zurückgeben muss, wenn ein Sensor mit der Funktion „Bei Änderung“ aktiviert wird. Beispielsensoren, die den Berichtsmodus bei Änderungen verwenden, sind
Schrittzähler-, Näherungs- und Herzfrequenzsensoren.
Mit dem Parameter sampling_period_ns
, der an die batch
-Funktion übergeben wird, wird die Mindestzeit zwischen aufeinanderfolgenden Ereignissen festgelegt. Das bedeutet, dass ein Ereignis erst generiert werden sollte, wenn seit dem letzten Ereignis sampling_period_ns
Nanosekunden vergangen sind, auch wenn sich der Wert seitdem geändert hat. Wenn sich der Wert ändert,
muss ein Ereignis generiert werden, sobald sampling_period_ns
seit dem letzten Ereignis verstrichen ist.
Angenommen, folgende Bedingungen sind erfüllt:
- Wir aktivieren den Schrittzähler mit
sampling_period_ns = 10 * 10^9
(10 Sekunden) - Wir gehen 55 Sekunden und bleiben dann eine Minute lang still.
- Die Ereignisse werden in der ersten Minute etwa alle 10 Sekunden generiert (einschließlich der Zeit
t=0
aufgrund der Aktivierung des Sensors undt=60
Sekunden), insgesamt also sieben Ereignisse. In der zweiten Minute wird kein Ereignis generiert, da sich der Wert der Schrittzahl nacht=60
Sekunden nicht geändert hat.
One-Shot
Nach der Erkennung eines Ereignisses deaktiviert sich der Sensor und sendet dann ein einzelnes Ereignis über die HAL. Die Reihenfolge ist wichtig, um Race-Bedingungen zu vermeiden. Der Sensor muss deaktiviert sein, bevor das Ereignis über die HAL gemeldet wird. Weitere Ereignisse werden erst gesendet, wenn der Sensor wieder aktiviert ist. Bedeutend Bewegung ist ein Beispiel für diese Art von Sensor.
Einmaleinschaltungssensoren werden manchmal auch als Triggersensoren bezeichnet.
Die Parameter sampling_period_ns
und max_report_latency_ns
, die an die Funktion batch
übergeben werden, werden ignoriert. Ereignisse aus einmaligen Ereignissen können nicht in Hardware-FIFOs gespeichert werden. Sie müssen gemeldet werden, sobald sie generiert werden.
Specials
Einzelheiten dazu, wann die Ereignisse generiert werden, finden Sie in den Beschreibungen der einzelnen Sensortypen.