1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use quadrature_decoder::{FullStep, HalfStep, IncrementalDecoder, QuadStep, StepMode};

fn decode<S, I>(decoder: &mut IncrementalDecoder<S>, pulse_trains: I)
where
    S: StepMode,
    I: Iterator<Item = (bool, bool)>,
{
    println!("Decoder is at counter: {:?}.", decoder.counter());
    println!();

    for (a, b) in pulse_trains {
        println!("Reading pulses: (a: {a:?}, b: {b:?})");
        match decoder.update(a, b) {
            Ok(Some(change)) => println!("Change detected: {:?}.", change),
            Ok(None) => println!("No change detected."),
            Err(error) => println!("Error detected: {:?}.", error),
        }
        println!("Decoder is at counter: {:?}.", decoder.counter());
        println!();
    }
}

fn main() {
    let a: Vec<bool> = vec![false, false, true, true, false, false, true, true];
    let b: Vec<bool> = vec![true, false, false, true, true, false, false, true];

    println!("Full-step decoder:");
    let mut full_step_decoder = IncrementalDecoder::<FullStep>::default();
    decode(
        &mut full_step_decoder,
        a.iter().cloned().zip(b.iter().cloned()),
    );
    println!();

    println!("Half-step decoder:");
    let mut half_step_decoder = IncrementalDecoder::<HalfStep>::default();
    decode(
        &mut half_step_decoder,
        a.iter().cloned().zip(b.iter().cloned()),
    );
    println!();

    println!("Quad-step decoder:");
    let mut quad_step_decoder = IncrementalDecoder::<QuadStep>::default();
    decode(
        &mut quad_step_decoder,
        a.iter().cloned().zip(b.iter().cloned()),
    );
    println!();
}