rsiot/components/cmp_esp_uart_slave/
config.rs

1use std::time::Duration;
2
3use esp_idf_svc::hal::{gpio::AnyIOPin, peripheral::Peripheral, uart::Uart};
4
5use crate::message::{Message, MsgDataBound};
6
7use crate::components_config::uart_general::*;
8
9/// Функция преобразования входных сообщений в данные для передачи I2C
10pub type TFnInput<TMsg, TBufferData> = fn(&Message<TMsg>, &mut TBufferData);
11
12/// Функция для преобразования полученных данных I2C в исходящие сообщения
13pub type TFnOutput<TMsg, TBufferData> = fn(&TBufferData) -> Vec<Message<TMsg>>;
14
15/// Функция для работы коммуникации I2C
16pub type TFnUartComm<TRequest, TResponse, TBufferData> =
17    fn(TRequest, &mut TBufferData) -> anyhow::Result<Option<TResponse>>;
18
19/// Конфигурация cmp_esp_uart_slave
20pub struct Config<TMsg, TUart, TPeripheral, TBufferData>
21where
22    TMsg: MsgDataBound,
23    TUart: Peripheral<P = TPeripheral> + 'static,
24    TPeripheral: Uart,
25{
26    /// Интерфейс uart
27    ///
28    /// Пример:
29    ///
30    /// ```rust
31    /// // Лучше использовать UART1, поскольку в UART0 могут выводиться логи
32    /// uart: peripherals.uart1
33    /// ```
34    pub uart: TUart,
35
36    /// Пин RX
37    ///
38    /// Пример:
39    ///
40    /// ```rust
41    /// pin_rx: peripherals.pins.gpio20.into(),
42    /// ```
43    pub pin_rx: AnyIOPin,
44
45    /// Пин TX
46    ///
47    /// Пример:
48    ///
49    /// ```rust
50    /// pin_tx: peripherals.pins.gpio21.into(),
51    /// ```
52    pub pin_tx: AnyIOPin,
53
54    /// Пин RTS запроса на передачу
55    pub pin_rts: AnyIOPin,
56
57    /// Скорость сетевого обмена
58    pub baudrate: Baudrate,
59
60    /// Кол-во бит данных
61    pub data_bits: DataBits,
62
63    /// Бит четности
64    pub parity: Parity,
65
66    /// Кол-во стоповых бит
67    pub stop_bits: StopBits,
68
69    /// Структура для хранения буферных данных
70    pub buffer_data_default: TBufferData,
71
72    /// Функция преобразования входных сообщений в данные для передачи по UART
73    ///
74    /// ```rust
75    /// fn_input: |_| None
76    /// ```
77    pub fn_input: TFnInput<TMsg, TBufferData>,
78
79    /// Функция коммуникации по UART
80    pub fn_uart_comm: TFnUartComm<FieldbusRequest, FieldbusResponse, TBufferData>,
81
82    /// Функция для преобразования полученных данных UART в исходящие сообщения.
83    ///
84    /// ```rust
85    /// fn_output: |_| vec![]
86    /// ```
87    pub fn_output: TFnOutput<TMsg, TBufferData>,
88
89    /// Периодичность генерирования исходящих сообщений
90    pub fn_output_period: Duration,
91}