indexed_incremental/
indexed_incremental.rs1use quadrature_decoder::{FullStep, HalfStep, IndexedIncrementalDecoder, QuadStep, StepMode};
2
3fn decode<S, I>(decoder: &mut IndexedIncrementalDecoder<S>, pulse_trains: I)
4where
5 S: StepMode,
6 I: Iterator<Item = ((bool, bool), bool)>,
7{
8 println!("Decoder is at counter: {:?}.", decoder.counter());
9 println!();
10
11 for ((a, b), z) in pulse_trains {
12 println!("Reading pulses: (a: {a:?}, b: {b:?}, z: {z:?})");
13 match decoder.update(a, b, z) {
14 Ok(Some(change)) => println!("Change detected: {:?}.", change),
15 Ok(None) => println!("No change detected."),
16 Err(error) => println!("Error detected: {:?}.", error),
17 }
18 println!("Decoder is at counter: {:?}.", decoder.counter());
19 println!();
20 }
21}
22
23fn main() {
24 let a: Vec<bool> = vec![false, false, true, true, false, false, true, true];
25 let b: Vec<bool> = vec![true, false, false, true, true, false, false, true];
26 let z: Vec<bool> = vec![false, false, false, false, true, false, false, false];
27
28 println!("Full-step decoder:");
29 let mut full_step_decoder = IndexedIncrementalDecoder::<FullStep>::default();
30 decode(
31 &mut full_step_decoder,
32 a.iter()
33 .cloned()
34 .zip(b.iter().cloned())
35 .zip(z.iter().cloned()),
36 );
37 println!();
38
39 println!("Half-step decoder:");
40 let mut half_step_decoder = IndexedIncrementalDecoder::<HalfStep>::default();
41 decode(
42 &mut half_step_decoder,
43 a.iter()
44 .cloned()
45 .zip(b.iter().cloned())
46 .zip(z.iter().cloned()),
47 );
48 println!();
49
50 println!("Quad-step decoder:");
51 let mut quad_step_decoder = IndexedIncrementalDecoder::<QuadStep>::default();
52 decode(
53 &mut quad_step_decoder,
54 a.iter()
55 .cloned()
56 .zip(b.iter().cloned())
57 .zip(z.iter().cloned()),
58 );
59 println!();
60}