rsiot/components/cmp_linux_uart_master/
config.rs1use std::time::Duration;
2
3use linux_embedded_hal::serialport;
4
5use crate::components_config::master_device::DeviceTrait;
6use crate::components_config::uart_general::{
7 Baudrate, DataBits, FieldbusRequest, FieldbusResponse, Parity, StopBits,
8};
9use crate::message::MsgDataBound;
10
11#[derive(Debug)]
13pub struct Config<TMsg>
14where
15 TMsg: MsgDataBound,
16{
17 pub port: &'static str,
26
27 pub baudrate: Baudrate,
29
30 pub data_bits: DataBits,
32
33 pub parity: Parity,
35
36 pub stop_bits: StopBits,
38
39 pub timeout: Duration,
41
42 pub gpio_chip: &'static str,
50
51 pub pin_rts: Option<u32>,
63
64 pub devices: Vec<Box<dyn DeviceTrait<TMsg, FieldbusRequest, FieldbusResponse>>>,
66}
67
68impl<TMsg> Default for Config<TMsg>
69where
70 TMsg: MsgDataBound,
71{
72 fn default() -> Self {
73 Self {
74 port: "/dev/ttyAMA0",
75 baudrate: Baudrate::default(),
76 data_bits: DataBits::default(),
77 parity: Parity::default(),
78 stop_bits: StopBits::default(),
79 timeout: Duration::from_millis(100),
80 gpio_chip: "/dev/gpiochip0",
81 pin_rts: Some(17),
82 devices: vec![],
83 }
84 }
85}
86
87impl From<DataBits> for serialport::DataBits {
88 fn from(value: DataBits) -> Self {
89 match value {
90 DataBits::_5 => serialport::DataBits::Five,
91 DataBits::_6 => serialport::DataBits::Six,
92 DataBits::_7 => serialport::DataBits::Seven,
93 DataBits::_8 => serialport::DataBits::Eight,
94 }
95 }
96}
97
98impl From<Parity> for serialport::Parity {
99 fn from(value: Parity) -> Self {
100 match value {
101 Parity::None => serialport::Parity::None,
102 Parity::Even => serialport::Parity::Even,
103 Parity::Odd => serialport::Parity::Odd,
104 }
105 }
106}
107
108impl From<StopBits> for serialport::StopBits {
109 fn from(value: StopBits) -> Self {
110 match value {
111 StopBits::_1 => serialport::StopBits::One,
112 StopBits::_1p5 => unimplemented!("Stop bit 1.5 not implemented"),
113 StopBits::_2 => serialport::StopBits::Two,
114 }
115 }
116}