Closed
Description
@astro suggested the following:
/// Feeds an existing watchdog to ensure the processor isn't reset. Sometimes
/// commonly referred to as "kicking" or "refreshing".
#[cfg(feature = "unproven")]
pub trait Watchdog {
/// Triggers the watchdog. This must be done once the watchdog is started
/// to prevent the processor being reset.
fn feed(&mut self);
}
/// Enables A watchdog timer to reset the processor if software is frozen or
/// stalled.
pub trait WatchdogEnable {
/// Unit of time used by the watchdog
type Time;
/// The started watchdog that should be `feed()`
type Target: Watchdog;
/// Starts the watchdog with a given period, typically once this is done
/// the watchdog needs to be kicked periodically or the processor is reset.
///
/// This consumes the value and returns the `Watchdog` trait that you must
/// `feed()`.
fn start<T>(self, period: T) -> Self::Target where T: Into<Self::Time>;
}
/// Disables a running watchdog timer so the processor won't be reset.
#[cfg(feature = "unproven")]
pub trait WatchdogDisable {
type Target: WatchdogEnable;
/// Disables the watchdog
///
/// This stops the watchdog and returns the `WatchdogEnable` trait so that
/// it can be started again.
fn disable(self) -> Self::Target;
}
I think this is an interesting approach that's worth thinking about.