1pub mod ram_command;
2mod ram_stub;
3pub mod reset;
4mod sifli_debug;
5pub mod speed;
6pub mod write_flash;
7
8use crate::sifli_debug::SifliUartCommand;
9use indicatif::{ProgressBar, ProgressStyle};
10use ram_stub::CHIP_FILE_NAME;
11use serialport::SerialPort;
12use std::env;
13use std::io::Write;
14use std::time::Duration;
15
16#[derive(Debug, Clone, PartialEq, Eq)]
17#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
18pub enum Operation {
19 #[cfg_attr(feature = "cli", clap(name = "no_reset"))]
20 None,
21 #[cfg_attr(feature = "cli", clap(name = "soft_reset"))]
22 SoftReset,
23 #[cfg_attr(feature = "cli", clap(name = "default_reset"))]
24 DefaultReset,
25}
26
27#[derive(Clone)]
28pub struct SifliToolBase {
29 pub port_name: String,
30 pub before: Operation,
31 pub chip: String,
32 pub memory_type: String,
33 pub baud: u32,
34 pub connect_attempts: i8,
35 pub compat: bool,
36 pub quiet: bool,
37}
38
39#[derive(Clone)]
40pub struct WriteFlashParams {
41 pub file_path: Vec<String>,
42 pub verify: bool,
43 pub no_compress: bool,
44 pub erase_all: bool,
45}
46
47pub struct SifliTool {
48 port: Box<dyn SerialPort>,
49 base: SifliToolBase,
50 step: i32,
51 write_flash_params: Option<WriteFlashParams>,
52}
53
54impl SifliTool {
55 pub fn new(base_param: SifliToolBase, write_flash_params: Option<WriteFlashParams>) -> Self {
56 let mut port = serialport::new(&base_param.port_name, 1000000)
57 .timeout(Duration::from_secs(5))
58 .open()
59 .unwrap();
60 port.write_request_to_send(false).unwrap();
61 std::thread::sleep(Duration::from_millis(100));
62 let step = 0;
63
64 let tool = Self {
65 port,
66 step,
67 base: base_param,
68 write_flash_params,
69 };
70
71 tool
72 }
73}