rsiot/components/cmp_esp_gpio/
config.rs

1use esp_idf_svc::hal::gpio::{AnyIOPin, AnyOutputPin, Pull};
2
3use crate::message::{Message, MsgDataBound};
4
5/// Конфигурация компонента cmp_esp_gpio
6pub struct Config<TMsg>
7where
8    TMsg: MsgDataBound,
9{
10    /// Конфигурация входов
11    ///
12    /// **Примеры**
13    ///
14    /// ```rust
15    #[doc = include_str!("test/config_inputs.rs")]
16    /// ```
17    pub inputs: Vec<ConfigGpioInput<TMsg>>,
18
19    /// Конфигурация выходов
20    ///
21    /// **Примеры**
22    ///
23    /// ```rust
24    #[doc = include_str!("test/config_outputs.rs")]
25    /// ```
26    pub outputs: Vec<ConfigGpioOutput<TMsg>>,
27}
28
29impl<TMsg> Default for Config<TMsg>
30where
31    TMsg: MsgDataBound,
32{
33    fn default() -> Self {
34        Self {
35            inputs: vec![],
36            outputs: vec![],
37        }
38    }
39}
40
41/// Конфигурация одного входа
42pub struct ConfigGpioInput<TMsg>
43where
44    TMsg: MsgDataBound,
45{
46    /// Пин
47    pub peripherals: AnyIOPin,
48
49    /// Функция преобразования значения пина в сообщение
50    pub fn_output: fn(bool) -> Message<TMsg>,
51
52    /// Подключение резистора подтяжки
53    pub pull: Pull,
54}
55
56/// Конфигурация одного выхода
57pub struct ConfigGpioOutput<TMsg>
58where
59    TMsg: MsgDataBound,
60{
61    /// Пин
62    pub peripherals: AnyOutputPin,
63
64    /// Функция преобразования входящих сообщений в сигналы управления
65    ///
66    /// ```rust
67    /// fn_input: |_| None
68    /// ```
69    pub fn_input: fn(Message<TMsg>) -> Option<bool>,
70
71    /// Подается ли напряжения в отключенном состоянии или нет
72    pub is_low_triggered: bool,
73}