rsiot/components/cmp_esp_uart_slave/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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
use std::time::Duration;
use esp_idf_svc::hal::{gpio::AnyIOPin, peripheral::Peripheral, uart::Uart};
use crate::message::{Message, MsgDataBound};
use crate::components_config::uart_general::*;
/// Функция преобразования входных сообщений в данные для передачи I2C
pub type TFnInput<TMsg, TBufferData> = fn(&Message<TMsg>, &mut TBufferData);
/// Функция для преобразования полученных данных I2C в исходящие сообщения
pub type TFnOutput<TMsg, TBufferData> = fn(&TBufferData) -> Vec<Message<TMsg>>;
/// Функция для работы коммуникации I2C
pub type TFnUartComm<TRequest, TResponse, TBufferData> =
fn(TRequest, &mut TBufferData) -> anyhow::Result<TResponse>;
/// Конфигурация cmp_esp_uart_slave
pub struct Config<TMsg, TUart, TPeripheral, TBufferData>
where
TMsg: MsgDataBound,
TUart: Peripheral<P = TPeripheral> + 'static,
TPeripheral: Uart,
{
/// Адрес устройства на шине
pub address: u8,
/// Интерфейс uart
///
/// Пример:
///
/// ```rust
/// // Лучше использовать UART1, поскольку в UART0 могут выводиться логи
/// uart: peripherals.uart1
/// ```
pub uart: TUart,
/// Пин RX
///
/// Пример:
///
/// ```rust
/// pin_rx: peripherals.pins.gpio20.into(),
/// ```
pub pin_rx: AnyIOPin,
/// Пин TX
///
/// Пример:
///
/// ```rust
/// pin_tx: peripherals.pins.gpio21.into(),
/// ```
pub pin_tx: AnyIOPin,
/// Пин RTS запроса на передачу
pub pin_rts: AnyIOPin,
/// Скорость сетевого обмена
pub baudrate: Baudrate,
/// Кол-во бит данных
pub data_bits: DataBits,
/// Бит четности
pub parity: Parity,
/// Кол-во стоповых бит
pub stop_bits: StopBits,
/// Структура для хранения буферных данных
pub buffer_data_default: TBufferData,
/// Функция преобразования входных сообщений в данные для передачи по UART
///
/// ```rust
/// fn_input: |_| None
/// ```
pub fn_input: TFnInput<TMsg, TBufferData>,
/// Функция коммуникации по UART
pub fn_uart_comm: TFnUartComm<UartRequest, UartResponse, TBufferData>,
/// Функция для преобразования полученных данных UART в исходящие сообщения.
///
/// ```rust
/// fn_output: |_| vec![]
/// ```
pub fn_output: TFnOutput<TMsg, TBufferData>,
/// Периодичность генерирования исходящих сообщений
pub fn_output_period: Duration,
}