pub trait Alarm<'a>: Time {
// Required methods
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§
sourcefn set_alarm_client(&self, client: &'a dyn AlarmClient)
fn set_alarm_client(&self, client: &'a dyn AlarmClient)
Specify the callback for when the counter reaches the alarm value. If there was a previously installed callback this call replaces it.
sourcefn set_alarm(&self, reference: Self::Ticks, dt: Self::Ticks)
fn set_alarm(&self, reference: Self::Ticks, dt: Self::Ticks)
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).
sourcefn get_alarm(&self) -> Self::Ticks
fn get_alarm(&self) -> Self::Ticks
Return the current alarm value. This is undefined at boot and
otherwise returns now + dt
from the last call to set_alarm
.
sourcefn disarm(&self) -> Result<(), ErrorCode>
fn disarm(&self) -> Result<(), ErrorCode>
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 futureErr(ErrorCode::FAIL)
the alarm could not be disarmed and will invoke the callback in the future
sourcefn is_armed(&self) -> bool
fn is_armed(&self) -> bool
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.
sourcefn minimum_dt(&self) -> Self::Ticks
fn minimum_dt(&self) -> Self::Ticks
Return the minimum dt value that is supported. Any dt smaller than this will automatically be increased to this minimum value.