tm1637_embedded_hal/builder.rs
1use crate::{
2 mode::Mode,
3 tokens::{Async, Blocking},
4 Brightness, TM1637,
5};
6
7/// `TM1637` 7-segment display builder.
8#[derive(Debug, Clone)]
9#[cfg_attr(feature = "defmt", derive(defmt::Format))]
10pub struct TM1637Builder<CLK, DIO, DELAY> {
11 clk: CLK,
12 dio: DIO,
13 delay: DELAY,
14 brightness: Brightness,
15 delay_us: u32,
16}
17
18impl<CLK, DIO, DELAY> TM1637Builder<CLK, DIO, DELAY> {
19 /// Create a new [`TM1637Builder`] instance with default values.
20 ///
21 /// - `brightness`: [`Brightness::L0`]
22 /// - `delay_us`: 100
23 pub const fn new(clk: CLK, dio: DIO, delay: DELAY) -> Self {
24 Self {
25 clk,
26 dio,
27 delay,
28 brightness: Brightness::L0,
29 delay_us: 100,
30 }
31 }
32
33 /// Set the brightness level.
34 pub const fn brightness(mut self, brightness: Brightness) -> Self {
35 self.brightness = brightness;
36 self
37 }
38
39 /// Set the delay in microseconds.
40 pub const fn delay_us(mut self, delay_us: u32) -> Self {
41 self.delay_us = delay_us;
42 self
43 }
44
45 /// Build a [`TM1637`] instance with the specified mode.
46 ///
47 /// ## Async
48 ///
49 /// ```rust
50 /// use tm1637_embedded_hal::{mock::Noop, tokens::Async, TM1637Builder};
51 ///
52 /// let clk = Noop;
53 /// let dio = Noop;
54 /// let delay = Noop;
55 ///
56 /// let tm = TM1637Builder::new(clk, dio, delay).build::<4, Async>();
57 /// ```
58 ///
59 /// ## Blocking
60 ///
61 /// ```rust
62 /// use tm1637_embedded_hal::{mock::Noop, tokens::Blocking, TM1637Builder};
63 ///
64 /// let clk = Noop;
65 /// let dio = Noop;
66 /// let delay = Noop;
67 ///
68 /// let tm = TM1637Builder::new(clk, dio, delay).build::<4, Blocking>();
69 /// ```
70 pub fn build<const N: usize, T: Mode>(self) -> TM1637<N, T, CLK, DIO, DELAY> {
71 TM1637::new(
72 self.clk,
73 self.dio,
74 self.delay,
75 self.brightness,
76 self.delay_us,
77 )
78 }
79
80 /// Build an async [`TM1637`] instance.
81 pub fn build_async<const N: usize>(self) -> TM1637<N, Async, CLK, DIO, DELAY> {
82 self.build()
83 }
84
85 /// Build a blocking [`TM1637`] instance.
86 pub fn build_blocking<const N: usize>(self) -> TM1637<N, Blocking, CLK, DIO, DELAY> {
87 self.build()
88 }
89}