pub struct Encoder<SwitchA: InputSwitch, SwitchB: InputSwitch, Config: EncoderConfig> { /* private fields */ }
Expand description
Concrete implementation of encoder.
§Type Params
SwitchA
- InputSwitch
that provides input A channel.
SwitchB
- InputSwitch
that provides input B channel.
Config
- EncoderConfig
that provides configs for encoder.
§Example
ⓘ
encoder_config!(
SomeEncoderConfig,
debounce_timer: MyElapsedTimer = MyElapsedTimer::new(2.millis()),
counts_div: i8 = 4
);
type MyEncoder<SwitchA, SwitchB> = Encoder<SwitchA, SwitchB, SomeEncoderConfig>;
let mut encoder = MyEncoder::new(
pin_a.into_active_low_switch(),
pin_b.into_active_low_switch(),
);
loop {
match encoder.update().unwrap() {
EncoderEvent::NoTurn => do_something_when_no_turn(),
EncoderEvent::ClockwiseTurn => do_something_upon_clockwise_turn(),
EncoderEvent::CounterClockwiseTurn => do_something_upon_counter_clockwise_turn(),
}
}
Implementations§
Source§impl<SwitchA: InputSwitch, SwitchB: InputSwitch, Config: EncoderConfig> Encoder<SwitchA, SwitchB, Config>
impl<SwitchA: InputSwitch, SwitchB: InputSwitch, Config: EncoderConfig> Encoder<SwitchA, SwitchB, Config>
Sourcepub fn new(input_switch_a: SwitchA, input_switch_b: SwitchB) -> Self
pub fn new(input_switch_a: SwitchA, input_switch_b: SwitchB) -> Self
Creates a new Encoder<SwitchA, SwitchB, Config>
from concretes SwitchA
, SwitchB
.
Sourcepub fn release_input_switches(self) -> (SwitchA, SwitchB)
pub fn release_input_switches(self) -> (SwitchA, SwitchB)
Consumses self
and release (SwitchA, SwitchB)
.
Trait Implementations§
Source§impl<SwitchA: InputSwitch, SwitchB: InputSwitch, Config: EncoderConfig> Control for Encoder<SwitchA, SwitchB, Config>where
<DebouncedInput<SwitchA, Config> as Control>::Error: From<<DebouncedInput<SwitchB, Config> as Control>::Error>,
impl<SwitchA: InputSwitch, SwitchB: InputSwitch, Config: EncoderConfig> Control for Encoder<SwitchA, SwitchB, Config>where
<DebouncedInput<SwitchA, Config> as Control>::Error: From<<DebouncedInput<SwitchB, Config> as Control>::Error>,
Auto Trait Implementations§
impl<SwitchA, SwitchB, Config> Freeze for Encoder<SwitchA, SwitchB, Config>where
<Config as EncoderConfig>::Counts: Freeze,
SwitchA: Freeze,
SwitchB: Freeze,
<<Config as DebouncedInputConfig>::Timer as ElapsedTimer>::Timestamp: Freeze,
impl<SwitchA, SwitchB, Config> RefUnwindSafe for Encoder<SwitchA, SwitchB, Config>where
<Config as EncoderConfig>::Counts: RefUnwindSafe,
SwitchA: RefUnwindSafe,
SwitchB: RefUnwindSafe,
<<Config as DebouncedInputConfig>::Timer as ElapsedTimer>::Timestamp: RefUnwindSafe,
Config: RefUnwindSafe,
impl<SwitchA, SwitchB, Config> Send for Encoder<SwitchA, SwitchB, Config>where
<Config as EncoderConfig>::Counts: Send,
SwitchA: Send,
SwitchB: Send,
<<Config as DebouncedInputConfig>::Timer as ElapsedTimer>::Timestamp: Send,
Config: Send,
impl<SwitchA, SwitchB, Config> Sync for Encoder<SwitchA, SwitchB, Config>where
<Config as EncoderConfig>::Counts: Sync,
SwitchA: Sync,
SwitchB: Sync,
<<Config as DebouncedInputConfig>::Timer as ElapsedTimer>::Timestamp: Sync,
Config: Sync,
impl<SwitchA, SwitchB, Config> Unpin for Encoder<SwitchA, SwitchB, Config>where
<Config as EncoderConfig>::Counts: Unpin,
SwitchA: Unpin,
SwitchB: Unpin,
<<Config as DebouncedInputConfig>::Timer as ElapsedTimer>::Timestamp: Unpin,
Config: Unpin,
impl<SwitchA, SwitchB, Config> UnwindSafe for Encoder<SwitchA, SwitchB, Config>where
<Config as EncoderConfig>::Counts: UnwindSafe,
SwitchA: UnwindSafe,
SwitchB: UnwindSafe,
<<Config as DebouncedInputConfig>::Timer as ElapsedTimer>::Timestamp: UnwindSafe,
Config: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more