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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
use std::time::Duration;
use serialport;
#[derive(PartialEq, Debug)]
pub enum DataBits {
Five,
Six,
Seven,
Eight
}
#[derive(PartialEq, Debug)]
pub enum Parity {
None,
Even,
Odd
}
#[derive(PartialEq, Debug)]
pub enum StopBits {
One,
Two
}
#[derive(PartialEq, Debug)]
pub enum FlowControl {
None,
Software,
Hardware
}
pub struct Settings {
pub baud_rate: u32,
pub timeout: u64,
pub data_bits: DataBits,
pub parity: Parity,
pub stop_bits: StopBits,
pub flow_control: FlowControl
}
impl Settings {
pub fn to_serial_port_settings(&self) -> serialport::SerialPortSettings {
let data_bits = match self.data_bits {
DataBits::Five => serialport::DataBits::Five,
DataBits::Six => serialport::DataBits::Six,
DataBits::Seven => serialport::DataBits::Seven,
DataBits::Eight => serialport::DataBits::Eight
};
let parity = match self.parity {
Parity::None => serialport::Parity::None,
Parity::Even => serialport::Parity::Even,
Parity::Odd => serialport::Parity::Odd
};
let stop_bits = match self.stop_bits {
StopBits::One => serialport::StopBits::One,
StopBits::Two => serialport::StopBits::Two
};
let flow_control = match self.flow_control {
FlowControl::None => serialport::FlowControl::None,
FlowControl::Software => serialport::FlowControl::Software,
FlowControl::Hardware => serialport::FlowControl::Hardware
};
serialport::SerialPortSettings {
baud_rate: self.baud_rate,
timeout: Duration::from_millis(self.timeout),
data_bits,
parity,
stop_bits,
flow_control
}
}
}
impl Default for Settings {
fn default() -> Settings {
Settings {
baud_rate: 9600,
timeout: 1000,
data_bits: DataBits::Eight,
parity: Parity::None,
stop_bits: StopBits::One,
flow_control: FlowControl::None
}
}
}