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}