pub trait Alarm<'a>: Time {
    fn set_alarm_client(&self, client: &'a dyn AlarmClient);
    fn set_alarm(&self, reference: Self::Ticks, dt: Self::Ticks);
    fn get_alarm(&self) -> Self::Ticks;
    fn disarm(&self) -> Result<(), ErrorCode>;
    fn is_armed(&self) -> bool;
    fn minimum_dt(&self) -> Self::Ticks;
Expand description

Interface for receiving notification when a particular time (Counter value) is reached. Clients use the AlarmClient trait to signal when the counter has reached a pre-specified value set in set_alarm. Alarms are intended for low-level time needs that require precision (i.e., firing on a precise clock tick). Software that needs more functionality but can tolerate some jitter should use the Timer trait instead.

Required Methods

Specify the callback for when the counter reaches the alarm value. If there was a previously installed callback this call replaces it.

Specify when the callback should be called and enable it. The callback will be enqueued when Time::now() == reference + dt. The callback itself may not run exactly at this time, due to delays. However, it it assured to execute after reference + dt: it can be delayed but will never fire early. The method takes reference and dt rather than a single value denoting the counter value so it can distinguish between alarms which have very recently already passed and those in the far far future (see #1651).

Return the current alarm value. This is undefined at boot and otherwise returns now + dt from the last call to set_alarm.

Disable the alarm and stop it from firing in the future. Valid Result<(), ErrorCode> codes are:

  • Ok(()) the alarm has been disarmed and will not invoke the callback in the future
  • Err(ErrorCode::FAIL) the alarm could not be disarmed and will invoke the callback in the future

Returns whether the alarm is currently armed. Note that this does not reliably indicate whether there will be a future callback: it is possible that the alarm has triggered (and disarmed) and a callback is pending and has not been called yet. In this case it possible for is_armed to return false yet to receive a callback.

Return the minimum dt value that is supported. Any dt smaller than this will automatically be increased to this minimum value.