rsiot/components/cmp_linux_uart_master/
config.rsuse std::time::Duration;
use linux_embedded_hal::serialport;
use crate::components_config::master_device::DeviceTrait;
use crate::components_config::uart_general::{
Baudrate, DataBits, Parity, StopBits, UartRequest, UartResponse,
};
use crate::message::MsgDataBound;
#[derive(Debug)]
pub struct Config<TMsg>
where
TMsg: MsgDataBound,
{
pub port: &'static str,
pub baudrate: Baudrate,
pub data_bits: DataBits,
pub parity: Parity,
pub stop_bits: StopBits,
pub timeout: Duration,
pub gpio_chip: &'static str,
pub pin_rts: Option<u32>,
pub devices: Vec<Box<dyn DeviceTrait<TMsg, UartRequest, UartResponse, u8>>>,
}
impl<TMsg> Default for Config<TMsg>
where
TMsg: MsgDataBound,
{
fn default() -> Self {
Self {
port: "/dev/ttyAMA0",
baudrate: Baudrate::default(),
data_bits: DataBits::default(),
parity: Parity::default(),
stop_bits: StopBits::default(),
devices: vec![],
timeout: Duration::from_millis(100),
gpio_chip: "/dev/gpiochip0",
pin_rts: Some(17),
}
}
}
impl From<DataBits> for serialport::DataBits {
fn from(value: DataBits) -> Self {
match value {
DataBits::_5 => serialport::DataBits::Five,
DataBits::_6 => serialport::DataBits::Six,
DataBits::_7 => serialport::DataBits::Seven,
DataBits::_8 => serialport::DataBits::Eight,
}
}
}
impl From<Parity> for serialport::Parity {
fn from(value: Parity) -> Self {
match value {
Parity::None => serialport::Parity::None,
Parity::Even => serialport::Parity::Even,
Parity::Odd => serialport::Parity::Odd,
}
}
}
impl From<StopBits> for serialport::StopBits {
fn from(value: StopBits) -> Self {
match value {
StopBits::_1 => serialport::StopBits::One,
StopBits::_1p5 => unimplemented!("Stop bit 1.5 not implemented"),
StopBits::_2 => serialport::StopBits::Two,
}
}
}