rsiot/components/cmp_raspberrypi_gpio/
config.rs

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