MonotonicTimeProvider

Struct MonotonicTimeProvider 

Source
pub struct MonotonicTimeProvider<F>
where F: Fn() -> Microseconds,
{ /* private fields */ }
Expand description

A monotonic time provider for no_std environments.

This implementation uses a user-provided timer function to get the current time. It’s designed to work with hardware timers or other monotonic time sources.

Implementations§

Source§

impl<F> MonotonicTimeProvider<F>
where F: Fn() -> Microseconds,

Source

pub fn new(timer_fn: F) -> Self

Create a new monotonic time provider with the given timer function.

The timer function should return the current time in microseconds from a monotonic source (e.g., hardware timer, system tick counter).

§Example
use embedded_charts::time::MonotonicTimeProvider;

// Example with a hypothetical hardware timer
fn hardware_timer_get_us() -> u64 {
    // Mock implementation - in real use, this would read from hardware
    1000
}

let timer = MonotonicTimeProvider::new(|| {
    // Get microseconds from hardware timer
    hardware_timer_get_us()
});
Source

pub fn from_ticks<G>( get_ticks: G, ticks_per_second: u32, ) -> MonotonicTimeProvider<impl Fn() -> Microseconds>
where G: Fn() -> u64,

Create a new monotonic time provider with a tick-based timer.

This is useful when you have a timer that increments at a known frequency.

§Arguments
  • get_ticks - Function that returns the current tick count
  • ticks_per_second - Number of ticks per second (timer frequency)
§Example
use embedded_charts::time::{MonotonicTimeProvider, Microseconds};

// Mock hardware timer function
fn hardware_timer_get_ticks() -> u64 {
    // Mock implementation - in real use, this would read from hardware
    1000
}

// Example with a 1MHz timer (1,000,000 ticks per second)
// let get_ticks = || hardware_timer_get_ticks();
// let timer = MonotonicTimeProvider::from_ticks(get_ticks, 1_000_000);

// Use the timer to get current time
// let current_time = timer.now();

Trait Implementations§

Source§

impl<F> Debug for MonotonicTimeProvider<F>
where F: Fn() -> Microseconds + Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<F> TimeProvider for MonotonicTimeProvider<F>
where F: Fn() -> Microseconds,

Source§

fn current_time_ms(&self) -> Milliseconds

Get the current time in milliseconds since some reference point. Read more
Source§

fn current_time_us(&self) -> Microseconds

Get the current time in microseconds since some reference point. Read more
Source§

fn last_time_ms(&self) -> Milliseconds

Get the last recorded time in milliseconds. Read more
Source§

fn last_time_us(&self) -> Microseconds

Get the last recorded time in microseconds. Read more
Source§

fn update_last_time_ms(&mut self, time: Milliseconds)

Update the last recorded time in milliseconds. Read more
Source§

fn update_last_time_us(&mut self, time: Microseconds)

Update the last recorded time in microseconds. Read more
Source§

fn elapsed_ms(&mut self) -> Milliseconds

Calculate elapsed time in milliseconds since the last call. Read more
Source§

fn elapsed_us(&mut self) -> Microseconds

Calculate elapsed time in microseconds since the last call. Read more
Source§

fn reset(&mut self)

Reset the time provider to start fresh timing. Read more

Auto Trait Implementations§

§

impl<F> Freeze for MonotonicTimeProvider<F>
where F: Freeze,

§

impl<F> RefUnwindSafe for MonotonicTimeProvider<F>
where F: RefUnwindSafe,

§

impl<F> Send for MonotonicTimeProvider<F>
where F: Send,

§

impl<F> Sync for MonotonicTimeProvider<F>
where F: Sync,

§

impl<F> Unpin for MonotonicTimeProvider<F>
where F: Unpin,

§

impl<F> UnwindSafe for MonotonicTimeProvider<F>
where F: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.