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}