Meldemodi

Sensoren können Ereignisse auf unterschiedliche Weise generieren, die als Berichtsmodi bezeichnet werden. Jeder Sensortyp hat genau einen zugehörigen Berichtsmodus. 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. Beispiele für Sensoren, die den kontinuierlichen Berichtsmodus verwenden, sind Beschleunigungsmesser und Gyroskope.

Bei Änderung

Ereignisse werden nur generiert, wenn sich die Messwerte geändert haben. Wenn der Sensor auf der HAL-Ebene aktiviert wird (durch Aufrufen von activate(..., enable=1)), wird ebenfalls ein Ereignis ausgelöst. Das bedeutet, dass die HAL sofort ein Ereignis zurückgeben muss, wenn ein Sensor vom Typ „on-change“ aktiviert wird. Beispiele für Sensoren, die den Änderungsberichtsmodus verwenden, sind die Sensortypen „Schrittzähler“, „Näherung“ und „Herzfrequenz“.

Der Parameter sampling_period_ns, der an die Funktion batch übergeben wird, wird verwendet, um die Mindestzeit zwischen aufeinanderfolgenden Ereignissen festzulegen. 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 geändert hat, muss ein Ereignis generiert werden, sobald sampling_period_ns seit dem letzten Ereignis vergangen ist.

Nehmen wir beispielsweise Folgendes an:

  • Wir aktivieren den Schrittzähler mit sampling_period_ns = 10 * 10^9 (10 Sekunden).
  • Wir gehen 55 Sekunden lang und bleiben dann eine Minute lang stehen.
  • Die Ereignisse werden in der ersten Minute etwa alle 10 Sekunden generiert (einschließlich bei t=0 aufgrund der Aktivierung des Sensors und bei t=60 Sekunden), insgesamt also sieben Ereignisse. In der zweiten Minute wird kein Ereignis generiert, da sich der Wert der Schrittzahl nach t=60 Sekunden nicht geändert hat.

One-Shot

Wenn ein Ereignis erkannt wird, 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 werden, bevor das Ereignis über die HAL gemeldet wird. Bis der Sensor reaktiviert wird, wird kein anderes Ereignis gesendet. Ein Beispiel für einen solchen Sensor ist der Sensor für erhebliche Bewegungen.

One-Shot-Sensoren 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. Die Ereignisse müssen gemeldet werden, sobald sie generiert werden.

Specials

Weitere Informationen dazu, wann die Ereignisse generiert werden, finden Sie in den Beschreibungen der einzelnen Sensortypen.