@@ -122,16 +122,8 @@ impl Connection {
122
122
}
123
123
124
124
pub fn reset ( & mut self ) -> Result < ( ) , Error > {
125
- sleep ( Duration :: from_millis ( 100 ) ) ;
126
-
127
- self . serial . write_data_terminal_ready ( false ) ?;
128
- self . serial . write_request_to_send ( true ) ?;
129
-
130
- sleep ( Duration :: from_millis ( 100 ) ) ;
131
-
132
- self . serial . write_request_to_send ( false ) ?;
133
-
134
- Ok ( ( ) )
125
+ let pid = self . port_info . pid ;
126
+ Ok ( reset_after_flash ( & mut * self . serial , pid) ?)
135
127
}
136
128
137
129
pub fn reset_to_flash ( & mut self , extra_delay : bool ) -> Result < ( ) , Error > {
@@ -280,4 +272,35 @@ impl Connection {
280
272
pub fn into_serial ( self ) -> Box < dyn SerialPort > {
281
273
self . serial
282
274
}
275
+
276
+ pub fn get_usb_pid ( & self ) -> Result < u16 , Error > {
277
+ Ok ( self . port_info . pid )
278
+ }
279
+ }
280
+
281
+ pub fn reset_after_flash ( serial : & mut dyn SerialPort , pid : u16 ) -> Result < ( ) , serialport:: Error > {
282
+ sleep ( Duration :: from_millis ( 100 ) ) ;
283
+
284
+ if pid == USB_SERIAL_JTAG_PID {
285
+ serial. write_data_terminal_ready ( false ) ?;
286
+
287
+ sleep ( Duration :: from_millis ( 100 ) ) ;
288
+
289
+ serial. write_request_to_send ( true ) ?;
290
+ serial. write_data_terminal_ready ( false ) ?;
291
+ serial. write_request_to_send ( true ) ?;
292
+
293
+ sleep ( Duration :: from_millis ( 100 ) ) ;
294
+
295
+ serial. write_request_to_send ( false ) ?;
296
+ } else {
297
+ serial. write_data_terminal_ready ( false ) ?;
298
+ serial. write_request_to_send ( true ) ?;
299
+
300
+ sleep ( Duration :: from_millis ( 100 ) ) ;
301
+
302
+ serial. write_request_to_send ( false ) ?;
303
+ }
304
+
305
+ Ok ( ( ) )
283
306
}
0 commit comments