Skip to content

Commit cc1c850

Browse files
JurajSadeljessebraham
authored andcommitted
Add USB-serial-JTAG support
add binary for tests add test message to debug test: test reset sequence for USB-serial-JTAG C3 Add USB-serial-JTAG support add test message to debug test: test reset sequence for USB-serial-JTAG C3
1 parent 8f161cf commit cc1c850

File tree

1 file changed

+57
-9
lines changed

1 file changed

+57
-9
lines changed

espflash/src/connection.rs

Lines changed: 57 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::{
66

77
use binread::{io::Cursor, BinRead, BinReaderExt};
88
use bytemuck::{Pod, Zeroable};
9-
use serialport::SerialPort;
9+
use serialport::{available_ports, SerialPort, SerialPortType};
1010
use slip_codec::SlipDecoder;
1111

1212
use crate::{
@@ -15,6 +15,8 @@ use crate::{
1515
error::{ConnectionError, Error, ResultExt, RomError, RomErrorKind},
1616
};
1717

18+
const USB_SERIAL_JTAG_PID: u16 = 0x1001;
19+
1820
#[derive(Debug, Copy, Clone, BinRead)]
1921
pub struct CommandResponse {
2022
pub resp: u8,
@@ -60,19 +62,65 @@ impl Connection {
6062
Ok(())
6163
}
6264

65+
// This function is probably redundant there should be another way how to get
66+
// PID in src/cli/mod.rs
67+
pub fn get_pid(&self) -> u16 {
68+
match available_ports() {
69+
Ok(ports) => {
70+
for p in ports {
71+
match p.port_type {
72+
SerialPortType::UsbPort(info) => {
73+
if self.serial.name().unwrap() == p.port_name {
74+
return info.pid;
75+
}
76+
}
77+
_ => {}
78+
}
79+
}
80+
}
81+
Err(e) => {
82+
eprintln!("{:?}", e);
83+
eprintln!("Error listing serial ports");
84+
}
85+
}
86+
87+
0
88+
}
89+
6390
pub fn reset_to_flash(&mut self, extra_delay: bool) -> Result<(), Error> {
64-
self.serial.write_data_terminal_ready(false)?;
65-
self.serial.write_request_to_send(true)?;
91+
if Connection::get_pid(&self) == USB_SERIAL_JTAG_PID {
92+
self.serial.write_data_terminal_ready(false)?;
93+
self.serial.write_request_to_send(false)?;
6694

67-
sleep(Duration::from_millis(100));
95+
sleep(Duration::from_millis(100));
6896

69-
self.serial.write_data_terminal_ready(true)?;
70-
self.serial.write_request_to_send(false)?;
97+
self.serial.write_data_terminal_ready(true)?;
98+
self.serial.write_request_to_send(false)?;
7199

72-
let millis = if extra_delay { 500 } else { 50 };
73-
sleep(Duration::from_millis(millis));
100+
sleep(Duration::from_millis(100));
74101

75-
self.serial.write_data_terminal_ready(false)?;
102+
self.serial.write_request_to_send(true)?;
103+
self.serial.write_data_terminal_ready(false)?;
104+
self.serial.write_request_to_send(true)?;
105+
106+
sleep(Duration::from_millis(100));
107+
108+
self.serial.write_data_terminal_ready(false)?;
109+
self.serial.write_request_to_send(false)?;
110+
} else {
111+
self.serial.write_data_terminal_ready(false)?;
112+
self.serial.write_request_to_send(true)?;
113+
114+
sleep(Duration::from_millis(100));
115+
116+
self.serial.write_data_terminal_ready(true)?;
117+
self.serial.write_request_to_send(false)?;
118+
119+
let millis = if extra_delay { 500 } else { 50 };
120+
sleep(Duration::from_millis(millis));
121+
122+
self.serial.write_data_terminal_ready(false)?;
123+
}
76124

77125
Ok(())
78126
}

0 commit comments

Comments
 (0)