rsiot/components/cmp_esp_gpio/
config.rs

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
use esp_idf_svc::hal::gpio::{AnyIOPin, AnyOutputPin, Pull};

use crate::message::{Message, MsgDataBound};

/// Конфигурация компонента cmp_esp_gpio
pub struct Config<TMsg>
where
    TMsg: MsgDataBound,
{
    /// Конфигурация входов
    ///
    /// **Примеры**
    ///
    /// ```rust
    #[doc = include_str!("test/config_inputs.rs")]
    /// ```
    pub inputs: Vec<ConfigGpioInput<TMsg>>,

    /// Конфигурация выходов
    ///
    /// **Примеры**
    ///
    /// ```rust
    #[doc = include_str!("test/config_outputs.rs")]
    /// ```
    pub outputs: Vec<ConfigGpioOutput<TMsg>>,
}

impl<TMsg> Default for Config<TMsg>
where
    TMsg: MsgDataBound,
{
    fn default() -> Self {
        Self {
            inputs: vec![],
            outputs: vec![],
        }
    }
}

/// Конфигурация одного входа
pub struct ConfigGpioInput<TMsg>
where
    TMsg: MsgDataBound,
{
    /// Пин
    pub peripherals: AnyIOPin,

    /// Функция преобразования значения пина в сообщение
    pub fn_output: fn(bool) -> Message<TMsg>,

    /// Подключение резистора подтяжки
    pub pull: Pull,
}

/// Конфигурация одного выхода
pub struct ConfigGpioOutput<TMsg>
where
    TMsg: MsgDataBound,
{
    /// Пин
    pub peripherals: AnyOutputPin,

    /// Функция преобразования входящих сообщений в сигналы управления
    ///
    /// ```rust
    /// fn_input: |_| None
    /// ```
    pub fn_input: fn(Message<TMsg>) -> Option<bool>,

    /// Подается ли напряжения в отключенном состоянии или нет
    pub is_low_triggered: bool,
}