pub(crate) struct UpdatableSignal {
signal: bool,
previous: bool,
}
impl UpdatableSignal {
pub fn new(signal: bool) -> UpdatableSignal {
Self {
signal,
previous: signal,
}
}
pub fn update(&mut self, signal: bool) {
self.previous = self.signal;
self.signal = signal;
}
pub fn is_on(&self) -> bool {
self.signal
}
pub fn is_on_long(&self) -> bool {
self.signal && self.previous
}
#[allow(dead_code)]
pub fn is_off_long(&self) -> bool {
!self.signal && !self.previous
}
pub fn rising_edge(&self) -> bool {
!self.previous && self.signal
}
pub fn falling_edge(&self) -> bool {
self.previous && !self.signal
}
}