Trait kernel::hil::time::Alarm

source ·
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§


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.


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).


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.


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 future
  • Err(ErrorCode::FAIL) the alarm could not be disarmed and will invoke the callback in the future

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.


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.