@@ -109,7 +109,7 @@ pub fn serial_thread(
109
109
* connected = false ;
110
110
}
111
111
112
- let device = get_device ( & devices_lock, & device_lock) ;
112
+ let ( devices , device) = get_device ( & devices_lock, & device_lock) ;
113
113
114
114
let mut port = match serialport:: new ( & device. name , device. baud_rate )
115
115
. timeout ( Duration :: from_millis ( 100 ) )
@@ -150,18 +150,16 @@ pub fn serial_thread(
150
150
. create ( ) ;
151
151
152
152
' connected_loop: loop {
153
- let devices = available_devices ( ) ;
154
- if let Ok ( mut write_guard) = devices_lock. write ( ) {
155
- * write_guard = devices. clone ( ) ;
156
- }
157
-
158
153
if let Some ( message) = disconnected ( & device, & devices, & device_lock) {
159
154
print_to_console ( & print_lock, message) ;
160
155
break ' connected_loop;
161
156
}
162
157
163
158
perform_writes ( & mut port, & send_rx, & raw_data_tx, t_zero) ;
164
- perform_reads ( & mut port, & raw_data_tx, t_zero) ;
159
+ if let Some ( e) = perform_reads ( & mut port, & raw_data_tx, t_zero) {
160
+ print_to_console ( & print_lock, Print :: Error ( e. to_string ( ) ) ) ;
161
+ break ' connected_loop;
162
+ } ;
165
163
166
164
//std::thread::sleep(Duration::from_millis(10));
167
165
}
@@ -180,7 +178,7 @@ fn available_devices() -> Vec<String> {
180
178
fn get_device (
181
179
devices_lock : & Arc < RwLock < Vec < String > > > ,
182
180
device_lock : & Arc < RwLock < Device > > ,
183
- ) -> Device {
181
+ ) -> ( Vec < String > , Device ) {
184
182
loop {
185
183
let devices = available_devices ( ) ;
186
184
if let Ok ( mut write_guard) = devices_lock. write ( ) {
@@ -189,7 +187,7 @@ fn get_device(
189
187
190
188
if let Ok ( device) = device_lock. read ( ) {
191
189
if devices. contains ( & device. name ) {
192
- return device. clone ( ) ;
190
+ return ( devices . clone ( ) , device. clone ( ) ) ;
193
191
}
194
192
}
195
193
std:: thread:: sleep ( Duration :: from_millis ( 100 ) ) ;
@@ -253,7 +251,7 @@ fn perform_reads(
253
251
port : & mut BufReader < Box < dyn SerialPort > > ,
254
252
raw_data_tx : & Sender < Packet > ,
255
253
t_zero : Instant ,
256
- ) {
254
+ ) -> Option < std :: io :: Error > {
257
255
let mut buf = "" . to_string ( ) ;
258
256
match serial_read ( port, & mut buf) {
259
257
Ok ( _) => {
@@ -270,8 +268,12 @@ fn perform_reads(
270
268
}
271
269
// Timeout is ok, just means there is no data to read
272
270
Err ( ref e) if e. kind ( ) == std:: io:: ErrorKind :: TimedOut => { }
271
+ Err ( e) if e. kind ( ) == std:: io:: ErrorKind :: BrokenPipe => {
272
+ return Some ( e) ;
273
+ }
273
274
Err ( e) => {
274
275
println ! ( "Error reading: {:?}" , e) ;
275
276
}
276
- }
277
+ } ;
278
+ None
277
279
}
0 commit comments