@@ -102,6 +102,8 @@ pub fn serial_thread(
102102 print_lock : Arc < RwLock < Vec < Print > > > ,
103103 connected_lock : Arc < RwLock < bool > > ,
104104) {
105+ let mut last_connected_device = Device :: default ( ) ;
106+
105107 loop {
106108 let _not_awake = keepawake:: Builder :: default ( )
107109 . display ( false )
@@ -114,7 +116,7 @@ pub fn serial_thread(
114116 * connected = false ;
115117 }
116118
117- let device = get_device ( & devices_lock, & device_lock) ;
119+ let device = get_device ( & devices_lock, & device_lock, & last_connected_device ) ;
118120
119121 let mut port = match serialport:: new ( & device. name , device. baud_rate )
120122 . timeout ( Duration :: from_millis ( 100 ) )
@@ -160,7 +162,9 @@ pub fn serial_thread(
160162 * write_guard = devices. clone ( ) ;
161163 }
162164
163- if let Some ( message) = disconnected ( & device, & devices, & device_lock) {
165+ if let Some ( message) =
166+ disconnected ( & device, & devices, & device_lock, & mut last_connected_device)
167+ {
164168 print_to_console ( & print_lock, message) ;
165169 break ' connected_loop;
166170 }
@@ -185,13 +189,18 @@ fn available_devices() -> Vec<String> {
185189fn get_device (
186190 devices_lock : & Arc < RwLock < Vec < String > > > ,
187191 device_lock : & Arc < RwLock < Device > > ,
192+ last_connected_device : & Device ,
188193) -> Device {
189194 loop {
190195 let devices = available_devices ( ) ;
191196 if let Ok ( mut write_guard) = devices_lock. write ( ) {
192197 * write_guard = devices. clone ( ) ;
193198 }
194199
200+ if devices. contains ( & last_connected_device. name ) {
201+ return last_connected_device. clone ( ) ;
202+ }
203+
195204 if let Ok ( device) = device_lock. read ( ) {
196205 if devices. contains ( & device. name ) {
197206 return device. clone ( ) ;
@@ -205,6 +214,7 @@ fn disconnected(
205214 device : & Device ,
206215 devices : & [ String ] ,
207216 device_lock : & Arc < RwLock < Device > > ,
217+ last_connected_device : & mut Device ,
208218) -> Option < Print > {
209219 // disconnection by button press
210220 if let Ok ( read_guard) = device_lock. read ( ) {
@@ -221,6 +231,7 @@ fn disconnected(
221231 if let Ok ( mut write_guard) = device_lock. write ( ) {
222232 write_guard. name . clear ( ) ;
223233 }
234+ * last_connected_device = device. clone ( ) ;
224235 return Some ( Print :: Error ( format ! (
225236 "Device has disconnected from serial port: {}" ,
226237 device. name
0 commit comments