sftool_lib/
lib.rs

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}