├── .gitignore ├── Cargo.toml ├── README.md ├── src └── main.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "esp-testrun" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | espflash = { version = "2.0", default-features = false } 8 | serialport = { version = "4.2.2" } 9 | clap = { version = "4.3.0", features = ["derive"] } 10 | log = { version = "0.4.20" } 11 | pretty_env_logger = { version = "0.5.0" } 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # esp-testrun (WIP) 2 | 3 | A very simple test runner based on espflash. 4 | 5 | It just runs ELF files found in a per-chip directory. 6 | 7 | Each test can print these output which get interpreted by the runner: 8 | - `[PASSED]` the test passed 9 | - `[FAILED]` the rest failed 10 | - `[HOST cmd arg1 arg2 ...]` run the given command on the host - the exit code won't influence the test result, the command needs to exit to make the testing progress 11 | - `[RUN chip elf]` flash the given elf file to the given chip (e.g. `esp32c6`) 12 | 13 | Tests need to be named `test*`. The `RUN` command can flash any elf - no need to be named like `test*` 14 | 15 | ## Usage 16 | 17 | ``` 18 | Usage: esp-testrun.exe [OPTIONS] 19 | 20 | Options: 21 | --esp32 Path to ESP32 elf files 22 | --esp32s2 Path to ESP32-S2 elf files 23 | --esp32s3 Path to ESP32-S3 elf files 24 | --esp32c2 Path to ESP32-C2 elf files 25 | --esp32c3 Path to ESP32-C3 elf files 26 | --esp32c6 Path to ESP32-C6 elf files 27 | --esp32h2 Path to ESP32-H2 elf files 28 | -h, --help Print help 29 | ``` 30 | 31 | Example 32 | ``` 33 | cargo run -- --esp32=target\xtensa-esp32-none-elf\debug\examples\ --esp32c6=target\riscv32imac-unknown-none-elf\debug\examples\ 34 | ``` 35 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | io::{BufRead, BufReader}, 3 | path::PathBuf, 4 | process::Command, 5 | time::{Duration, SystemTime}, 6 | }; 7 | 8 | use clap::Parser; 9 | use espflash::{flasher::Flasher, interface::Interface}; 10 | use serialport::{SerialPortInfo, SerialPortType}; 11 | 12 | #[derive(Parser)] 13 | struct Cli { 14 | /// Path to ESP32 elf files 15 | #[arg(long)] 16 | esp32: Option, 17 | 18 | /// Path to ESP32-S2 elf files 19 | #[arg(long)] 20 | esp32s2: Option, 21 | 22 | /// Path to ESP32-S3 elf files 23 | #[arg(long)] 24 | esp32s3: Option, 25 | 26 | /// Path to ESP32-C2 elf files 27 | #[arg(long)] 28 | esp32c2: Option, 29 | 30 | /// Path to ESP32-C3 elf files 31 | #[arg(long)] 32 | esp32c3: Option, 33 | 34 | /// Path to ESP32-C6 elf files 35 | #[arg(long)] 36 | esp32c6: Option, 37 | 38 | /// Path to ESP32-H2 elf files 39 | #[arg(long)] 40 | esp32h2: Option, 41 | } 42 | 43 | fn main() { 44 | pretty_env_logger::init(); 45 | let cli = Cli::parse(); 46 | 47 | let mut boards = Vec::new(); 48 | let mut serial_ports = Vec::new(); 49 | 50 | let ports = serialport::available_ports().unwrap(); 51 | for port in ports { 52 | let SerialPortType::UsbPort(info) = port.clone().port_type else { 53 | panic!(); 54 | }; 55 | let mut flasher = Flasher::connect( 56 | Interface::new(&port, None, None).unwrap(), 57 | info, 58 | Some(921600), 59 | true, 60 | ) 61 | .unwrap(); 62 | 63 | let binfo = flasher.device_info().unwrap(); 64 | boards.push(binfo.chip); 65 | serial_ports.push(port); 66 | } 67 | 68 | let mut test_paths: Vec<(espflash::targets::Chip, PathBuf)> = Vec::new(); 69 | if let Some(path) = cli.esp32 { 70 | test_paths.push((espflash::targets::Chip::Esp32, path)); 71 | } 72 | if let Some(path) = cli.esp32s2 { 73 | test_paths.push((espflash::targets::Chip::Esp32s2, path)); 74 | } 75 | if let Some(path) = cli.esp32s3 { 76 | test_paths.push((espflash::targets::Chip::Esp32s3, path)); 77 | } 78 | if let Some(path) = cli.esp32c2 { 79 | test_paths.push((espflash::targets::Chip::Esp32c2, path)); 80 | } 81 | if let Some(path) = cli.esp32c3 { 82 | test_paths.push((espflash::targets::Chip::Esp32c3, path)); 83 | } 84 | if let Some(path) = cli.esp32c6 { 85 | test_paths.push((espflash::targets::Chip::Esp32c6, path)); 86 | } 87 | if let Some(path) = cli.esp32h2 { 88 | test_paths.push((espflash::targets::Chip::Esp32h2, path)); 89 | } 90 | 91 | for (chip, _) in &test_paths { 92 | run_all_tests_for_chip(*chip, &test_paths, &serial_ports, &boards); 93 | } 94 | } 95 | 96 | fn run_all_tests_for_chip( 97 | chip: espflash::targets::Chip, 98 | paths: &Vec<(espflash::targets::Chip, PathBuf)>, 99 | ports: &Vec, 100 | boards: &Vec, 101 | ) { 102 | run_tests_for_chip_internal(chip, paths, ports, boards, None); 103 | } 104 | 105 | fn run_tests_for_chip_internal( 106 | chip: espflash::targets::Chip, 107 | paths: &Vec<(espflash::targets::Chip, PathBuf)>, 108 | ports: &Vec, 109 | boards: &Vec, 110 | specific_executable: Option, 111 | ) { 112 | if specific_executable.is_none() { 113 | println!(); 114 | println!("Running tests on {}", chip); 115 | } 116 | 117 | let index = boards 118 | .into_iter() 119 | .enumerate() 120 | .find(|(_, c)| **c == chip) 121 | .unwrap() 122 | .0; 123 | let port = &ports[index]; 124 | 125 | let path = &paths.into_iter().find(|(c, _)| *c == chip).unwrap().1; 126 | 127 | // collect elf files 128 | // only files starting with `test` will be used unless `specific_executable` 129 | // is given - in that case it must exactly match. ELFs are not allowed to contain `-` in their name. 130 | let tests: Vec<(Vec, String)> = path 131 | .read_dir() 132 | .unwrap() 133 | .map(|e| e.unwrap()) 134 | .filter(|e| e.file_type().unwrap().is_file()) 135 | .map(|e| (e.path(), e.file_name())) 136 | .filter(|(_, n)| !n.to_str().unwrap().contains("-")) 137 | .filter(|(_, n)| { 138 | specific_executable.is_none() && n.to_str().unwrap().starts_with("test") 139 | || specific_executable.is_some() 140 | && n.to_str().unwrap() == specific_executable.as_ref().unwrap() 141 | }) 142 | .map(|(f, n)| { 143 | let bytes = std::fs::read(f).unwrap(); 144 | (bytes, n.to_str().unwrap().to_string()) 145 | }) 146 | .filter(|(b, _n)| { 147 | b.len() > 4 && b[0] == 0x7f && b[1] == b'E' && b[2] == b'L' && b[3] == b'F' 148 | }) 149 | .collect(); 150 | 151 | // flash and run each file 152 | for (elf, filename) in tests { 153 | println!("{filename}"); 154 | 155 | let SerialPortType::UsbPort(info) = port.clone().port_type else { 156 | panic!(); 157 | }; 158 | let mut con = Flasher::connect( 159 | Interface::new(&port, None, None).unwrap(), 160 | info, 161 | Some(921600), 162 | true, 163 | ) 164 | .unwrap(); 165 | 166 | con.change_baud(921600).unwrap(); 167 | con.load_elf_to_flash(&elf, None, None, None, None, None, None) 168 | .unwrap(); 169 | 170 | if specific_executable.is_some() { 171 | // if a `specific_executable` is given that should just run - we don't want to check anything 172 | break; 173 | } 174 | 175 | let mut serial = con.into_interface().serial_port; 176 | 177 | let started_at = SystemTime::now(); 178 | serial.set_baud_rate(115200).unwrap(); 179 | serial.set_timeout(Duration::from_millis(5)).unwrap(); 180 | let reader = BufReader::new(serial); 181 | let mut reader = reader.lines(); 182 | loop { 183 | if let Ok(s) = reader.next().unwrap() { 184 | log::debug!("DEVICE: {}", s); 185 | 186 | if s.starts_with("[PASSED]") { 187 | println!("{filename} => {s}"); 188 | break; 189 | } 190 | if s.starts_with("[FAILED") { 191 | println!("{filename} => {s}"); 192 | break; 193 | } 194 | if s.starts_with("[HOST ") { 195 | let cmd = s.strip_prefix("[HOST ").unwrap().strip_suffix("]").unwrap(); 196 | run_cmd(cmd); 197 | } 198 | if s.starts_with("[RUN ") { 199 | let cmd = s.strip_prefix("[RUN ").unwrap().strip_suffix("]").unwrap(); 200 | run_on_chip(cmd, paths, ports, boards); 201 | } 202 | } 203 | 204 | if started_at.elapsed().unwrap() > Duration::from_secs(30) { 205 | println!("{filename} => TIMEOUT"); 206 | break; 207 | } 208 | } 209 | } 210 | } 211 | 212 | fn run_on_chip( 213 | cmd: &str, 214 | paths: &Vec<(espflash::targets::Chip, PathBuf)>, 215 | ports: &Vec, 216 | boards: &Vec, 217 | ) { 218 | let parts: Vec<&str> = cmd.split(" ").collect(); 219 | log::debug!("Flashing {:?}", &parts); 220 | run_tests_for_chip_internal( 221 | espflash::targets::Chip::try_from(parts[0]).unwrap(), 222 | paths, 223 | ports, 224 | boards, 225 | Some(parts[1].to_string()), 226 | ); 227 | } 228 | 229 | // simply run a command on the host - failing or not doesn't change anything to the test result 230 | fn run_cmd(cmd: &str) { 231 | let parts: Vec<&str> = cmd.split(" ").collect(); 232 | log::debug!("running command {:?}", &parts); 233 | let output = Command::new(parts[0]).args(&parts[1..]).output().unwrap(); 234 | log::debug!("raw command output {:02x?}", &output.stdout); 235 | log::debug!("command output {}", unsafe { 236 | std::str::from_utf8_unchecked(&output.stdout) 237 | }); 238 | } 239 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "CoreFoundation-sys" 7 | version = "0.1.4" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "d0e9889e6db118d49d88d84728d0e964d973a5680befb5f85f55141beea5c20b" 10 | dependencies = [ 11 | "libc", 12 | "mach", 13 | ] 14 | 15 | [[package]] 16 | name = "IOKit-sys" 17 | version = "0.1.5" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "99696c398cbaf669d2368076bdb3d627fb0ce51a26899d7c61228c5c0af3bf4a" 20 | dependencies = [ 21 | "CoreFoundation-sys", 22 | "libc", 23 | "mach", 24 | ] 25 | 26 | [[package]] 27 | name = "addr2line" 28 | version = "0.21.0" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 31 | dependencies = [ 32 | "gimli", 33 | ] 34 | 35 | [[package]] 36 | name = "adler" 37 | version = "1.0.2" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 40 | 41 | [[package]] 42 | name = "aho-corasick" 43 | version = "1.1.2" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" 46 | dependencies = [ 47 | "memchr", 48 | ] 49 | 50 | [[package]] 51 | name = "anstream" 52 | version = "0.6.4" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" 55 | dependencies = [ 56 | "anstyle", 57 | "anstyle-parse", 58 | "anstyle-query", 59 | "anstyle-wincon", 60 | "colorchoice", 61 | "utf8parse", 62 | ] 63 | 64 | [[package]] 65 | name = "anstyle" 66 | version = "1.0.4" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" 69 | 70 | [[package]] 71 | name = "anstyle-parse" 72 | version = "0.2.2" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" 75 | dependencies = [ 76 | "utf8parse", 77 | ] 78 | 79 | [[package]] 80 | name = "anstyle-query" 81 | version = "1.0.0" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" 84 | dependencies = [ 85 | "windows-sys", 86 | ] 87 | 88 | [[package]] 89 | name = "anstyle-wincon" 90 | version = "3.0.1" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" 93 | dependencies = [ 94 | "anstyle", 95 | "windows-sys", 96 | ] 97 | 98 | [[package]] 99 | name = "array-init" 100 | version = "2.1.0" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" 103 | 104 | [[package]] 105 | name = "atomic-polyfill" 106 | version = "0.1.11" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" 109 | dependencies = [ 110 | "critical-section", 111 | ] 112 | 113 | [[package]] 114 | name = "autocfg" 115 | version = "1.1.0" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 118 | 119 | [[package]] 120 | name = "backtrace" 121 | version = "0.3.69" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 124 | dependencies = [ 125 | "addr2line", 126 | "cc", 127 | "cfg-if", 128 | "libc", 129 | "miniz_oxide", 130 | "object", 131 | "rustc-demangle", 132 | ] 133 | 134 | [[package]] 135 | name = "backtrace-ext" 136 | version = "0.2.1" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" 139 | dependencies = [ 140 | "backtrace", 141 | ] 142 | 143 | [[package]] 144 | name = "base64" 145 | version = "0.21.5" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" 148 | 149 | [[package]] 150 | name = "binrw" 151 | version = "0.12.0" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | checksum = "9e8318fda24dc135cdd838f57a2b5ccb6e8f04ff6b6c65528c4bd9b5fcdc5cf6" 154 | dependencies = [ 155 | "array-init", 156 | "binrw_derive", 157 | "bytemuck", 158 | ] 159 | 160 | [[package]] 161 | name = "binrw_derive" 162 | version = "0.12.0" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "db0832bed83248115532dfb25af54fae1c83d67a2e4e3e2f591c13062e372e7e" 165 | dependencies = [ 166 | "either", 167 | "owo-colors", 168 | "proc-macro2", 169 | "quote", 170 | "syn 1.0.109", 171 | ] 172 | 173 | [[package]] 174 | name = "bitflags" 175 | version = "1.3.2" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 178 | 179 | [[package]] 180 | name = "bitflags" 181 | version = "2.0.2" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" 184 | 185 | [[package]] 186 | name = "bitvec" 187 | version = "1.0.1" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" 190 | dependencies = [ 191 | "funty", 192 | "radium", 193 | "tap", 194 | "wyz", 195 | ] 196 | 197 | [[package]] 198 | name = "block-buffer" 199 | version = "0.10.4" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 202 | dependencies = [ 203 | "generic-array", 204 | ] 205 | 206 | [[package]] 207 | name = "bytemuck" 208 | version = "1.14.0" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" 211 | dependencies = [ 212 | "bytemuck_derive", 213 | ] 214 | 215 | [[package]] 216 | name = "bytemuck_derive" 217 | version = "1.5.0" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" 220 | dependencies = [ 221 | "proc-macro2", 222 | "quote", 223 | "syn 2.0.38", 224 | ] 225 | 226 | [[package]] 227 | name = "byteorder" 228 | version = "1.5.0" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 231 | 232 | [[package]] 233 | name = "cc" 234 | version = "1.0.83" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 237 | dependencies = [ 238 | "libc", 239 | ] 240 | 241 | [[package]] 242 | name = "cfg-if" 243 | version = "1.0.0" 244 | source = "registry+https://github.com/rust-lang/crates.io-index" 245 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 246 | 247 | [[package]] 248 | name = "clap" 249 | version = "4.4.7" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" 252 | dependencies = [ 253 | "clap_builder", 254 | "clap_derive", 255 | ] 256 | 257 | [[package]] 258 | name = "clap_builder" 259 | version = "4.4.7" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" 262 | dependencies = [ 263 | "anstream", 264 | "anstyle", 265 | "clap_lex", 266 | "strsim", 267 | ] 268 | 269 | [[package]] 270 | name = "clap_derive" 271 | version = "4.4.7" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" 274 | dependencies = [ 275 | "heck", 276 | "proc-macro2", 277 | "quote", 278 | "syn 2.0.38", 279 | ] 280 | 281 | [[package]] 282 | name = "clap_lex" 283 | version = "0.6.0" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" 286 | 287 | [[package]] 288 | name = "colorchoice" 289 | version = "1.0.0" 290 | source = "registry+https://github.com/rust-lang/crates.io-index" 291 | checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" 292 | 293 | [[package]] 294 | name = "cpufeatures" 295 | version = "0.2.11" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" 298 | dependencies = [ 299 | "libc", 300 | ] 301 | 302 | [[package]] 303 | name = "crc32fast" 304 | version = "1.3.2" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 307 | dependencies = [ 308 | "cfg-if", 309 | ] 310 | 311 | [[package]] 312 | name = "critical-section" 313 | version = "1.1.2" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" 316 | 317 | [[package]] 318 | name = "crypto-common" 319 | version = "0.1.6" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 322 | dependencies = [ 323 | "generic-array", 324 | "typenum", 325 | ] 326 | 327 | [[package]] 328 | name = "csv" 329 | version = "1.3.0" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" 332 | dependencies = [ 333 | "csv-core", 334 | "itoa", 335 | "ryu", 336 | "serde", 337 | ] 338 | 339 | [[package]] 340 | name = "csv-core" 341 | version = "0.1.11" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" 344 | dependencies = [ 345 | "memchr", 346 | ] 347 | 348 | [[package]] 349 | name = "darling" 350 | version = "0.14.4" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" 353 | dependencies = [ 354 | "darling_core", 355 | "darling_macro", 356 | ] 357 | 358 | [[package]] 359 | name = "darling_core" 360 | version = "0.14.4" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" 363 | dependencies = [ 364 | "fnv", 365 | "ident_case", 366 | "proc-macro2", 367 | "quote", 368 | "strsim", 369 | "syn 1.0.109", 370 | ] 371 | 372 | [[package]] 373 | name = "darling_macro" 374 | version = "0.14.4" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" 377 | dependencies = [ 378 | "darling_core", 379 | "quote", 380 | "syn 1.0.109", 381 | ] 382 | 383 | [[package]] 384 | name = "deku" 385 | version = "0.16.0" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "819b87cc7a05b3abe3fc38e59b3980a5fd3162f25a247116441a9171d3e84481" 388 | dependencies = [ 389 | "bitvec", 390 | "deku_derive", 391 | ] 392 | 393 | [[package]] 394 | name = "deku_derive" 395 | version = "0.16.0" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "4e2ca12572239215a352a74ad7c776d7e8a914f8a23511c6cbedddd887e5009e" 398 | dependencies = [ 399 | "darling", 400 | "proc-macro-crate", 401 | "proc-macro2", 402 | "quote", 403 | "syn 1.0.109", 404 | ] 405 | 406 | [[package]] 407 | name = "digest" 408 | version = "0.10.7" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 411 | dependencies = [ 412 | "block-buffer", 413 | "crypto-common", 414 | ] 415 | 416 | [[package]] 417 | name = "either" 418 | version = "1.9.0" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" 421 | 422 | [[package]] 423 | name = "env_logger" 424 | version = "0.10.0" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" 427 | dependencies = [ 428 | "humantime", 429 | "is-terminal", 430 | "log", 431 | "regex", 432 | "termcolor", 433 | ] 434 | 435 | [[package]] 436 | name = "equivalent" 437 | version = "1.0.1" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 440 | 441 | [[package]] 442 | name = "errno" 443 | version = "0.3.5" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" 446 | dependencies = [ 447 | "libc", 448 | "windows-sys", 449 | ] 450 | 451 | [[package]] 452 | name = "esp-idf-part" 453 | version = "0.4.1" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "28192549b6c3d0bfd3be8ff694802b8d92ff7e1b12a6fd0285ca96c66e97bed3" 456 | dependencies = [ 457 | "csv", 458 | "deku", 459 | "heapless", 460 | "md5", 461 | "parse_int", 462 | "regex", 463 | "serde", 464 | "serde_plain", 465 | "strum 0.24.1", 466 | "thiserror", 467 | ] 468 | 469 | [[package]] 470 | name = "esp-testrun" 471 | version = "0.1.0" 472 | dependencies = [ 473 | "clap", 474 | "espflash", 475 | "log", 476 | "pretty_env_logger", 477 | "serialport", 478 | ] 479 | 480 | [[package]] 481 | name = "espflash" 482 | version = "2.1.0" 483 | source = "registry+https://github.com/rust-lang/crates.io-index" 484 | checksum = "76acb8029cc0571b926262ba45bce67686bc41081a40ae286779a664373d6132" 485 | dependencies = [ 486 | "base64", 487 | "binrw", 488 | "bytemuck", 489 | "esp-idf-part", 490 | "flate2", 491 | "log", 492 | "miette", 493 | "serde", 494 | "serialport", 495 | "sha2", 496 | "slip-codec", 497 | "strum 0.25.0", 498 | "thiserror", 499 | "toml", 500 | "xmas-elf", 501 | ] 502 | 503 | [[package]] 504 | name = "flate2" 505 | version = "1.0.28" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" 508 | dependencies = [ 509 | "crc32fast", 510 | "miniz_oxide", 511 | ] 512 | 513 | [[package]] 514 | name = "fnv" 515 | version = "1.0.7" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 518 | 519 | [[package]] 520 | name = "funty" 521 | version = "2.0.0" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" 524 | 525 | [[package]] 526 | name = "generic-array" 527 | version = "0.14.7" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 530 | dependencies = [ 531 | "typenum", 532 | "version_check", 533 | ] 534 | 535 | [[package]] 536 | name = "gimli" 537 | version = "0.28.0" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" 540 | 541 | [[package]] 542 | name = "hash32" 543 | version = "0.2.1" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" 546 | dependencies = [ 547 | "byteorder", 548 | ] 549 | 550 | [[package]] 551 | name = "hashbrown" 552 | version = "0.14.2" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" 555 | 556 | [[package]] 557 | name = "heapless" 558 | version = "0.7.16" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" 561 | dependencies = [ 562 | "atomic-polyfill", 563 | "hash32", 564 | "rustc_version", 565 | "serde", 566 | "spin", 567 | "stable_deref_trait", 568 | ] 569 | 570 | [[package]] 571 | name = "heck" 572 | version = "0.4.1" 573 | source = "registry+https://github.com/rust-lang/crates.io-index" 574 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 575 | 576 | [[package]] 577 | name = "hermit-abi" 578 | version = "0.3.3" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" 581 | 582 | [[package]] 583 | name = "humantime" 584 | version = "2.1.0" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 587 | 588 | [[package]] 589 | name = "ident_case" 590 | version = "1.0.1" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 593 | 594 | [[package]] 595 | name = "indexmap" 596 | version = "2.1.0" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" 599 | dependencies = [ 600 | "equivalent", 601 | "hashbrown", 602 | ] 603 | 604 | [[package]] 605 | name = "io-lifetimes" 606 | version = "1.0.11" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" 609 | dependencies = [ 610 | "hermit-abi", 611 | "libc", 612 | "windows-sys", 613 | ] 614 | 615 | [[package]] 616 | name = "is-terminal" 617 | version = "0.4.7" 618 | source = "registry+https://github.com/rust-lang/crates.io-index" 619 | checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" 620 | dependencies = [ 621 | "hermit-abi", 622 | "io-lifetimes", 623 | "rustix", 624 | "windows-sys", 625 | ] 626 | 627 | [[package]] 628 | name = "is_ci" 629 | version = "1.1.1" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb" 632 | 633 | [[package]] 634 | name = "itoa" 635 | version = "1.0.9" 636 | source = "registry+https://github.com/rust-lang/crates.io-index" 637 | checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" 638 | 639 | [[package]] 640 | name = "libc" 641 | version = "0.2.149" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" 644 | 645 | [[package]] 646 | name = "libudev" 647 | version = "0.3.0" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0" 650 | dependencies = [ 651 | "libc", 652 | "libudev-sys", 653 | ] 654 | 655 | [[package]] 656 | name = "libudev-sys" 657 | version = "0.1.4" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" 660 | dependencies = [ 661 | "libc", 662 | "pkg-config", 663 | ] 664 | 665 | [[package]] 666 | name = "linux-raw-sys" 667 | version = "0.3.8" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" 670 | 671 | [[package]] 672 | name = "lock_api" 673 | version = "0.4.11" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" 676 | dependencies = [ 677 | "autocfg", 678 | "scopeguard", 679 | ] 680 | 681 | [[package]] 682 | name = "log" 683 | version = "0.4.20" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 686 | 687 | [[package]] 688 | name = "mach" 689 | version = "0.1.2" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | checksum = "2fd13ee2dd61cc82833ba05ade5a30bb3d63f7ced605ef827063c63078302de9" 692 | dependencies = [ 693 | "libc", 694 | ] 695 | 696 | [[package]] 697 | name = "mach2" 698 | version = "0.4.1" 699 | source = "registry+https://github.com/rust-lang/crates.io-index" 700 | checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" 701 | dependencies = [ 702 | "libc", 703 | ] 704 | 705 | [[package]] 706 | name = "md5" 707 | version = "0.7.0" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" 710 | 711 | [[package]] 712 | name = "memchr" 713 | version = "2.6.4" 714 | source = "registry+https://github.com/rust-lang/crates.io-index" 715 | checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" 716 | 717 | [[package]] 718 | name = "miette" 719 | version = "5.10.0" 720 | source = "registry+https://github.com/rust-lang/crates.io-index" 721 | checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" 722 | dependencies = [ 723 | "backtrace", 724 | "backtrace-ext", 725 | "is-terminal", 726 | "miette-derive", 727 | "once_cell", 728 | "owo-colors", 729 | "supports-color", 730 | "supports-hyperlinks", 731 | "supports-unicode", 732 | "terminal_size", 733 | "textwrap", 734 | "thiserror", 735 | "unicode-width", 736 | ] 737 | 738 | [[package]] 739 | name = "miette-derive" 740 | version = "5.10.0" 741 | source = "registry+https://github.com/rust-lang/crates.io-index" 742 | checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" 743 | dependencies = [ 744 | "proc-macro2", 745 | "quote", 746 | "syn 2.0.38", 747 | ] 748 | 749 | [[package]] 750 | name = "miniz_oxide" 751 | version = "0.7.1" 752 | source = "registry+https://github.com/rust-lang/crates.io-index" 753 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 754 | dependencies = [ 755 | "adler", 756 | ] 757 | 758 | [[package]] 759 | name = "nix" 760 | version = "0.26.4" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" 763 | dependencies = [ 764 | "bitflags 1.3.2", 765 | "cfg-if", 766 | "libc", 767 | ] 768 | 769 | [[package]] 770 | name = "num-traits" 771 | version = "0.2.17" 772 | source = "registry+https://github.com/rust-lang/crates.io-index" 773 | checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" 774 | dependencies = [ 775 | "autocfg", 776 | ] 777 | 778 | [[package]] 779 | name = "object" 780 | version = "0.32.1" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" 783 | dependencies = [ 784 | "memchr", 785 | ] 786 | 787 | [[package]] 788 | name = "once_cell" 789 | version = "1.18.0" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" 792 | 793 | [[package]] 794 | name = "owo-colors" 795 | version = "3.5.0" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" 798 | 799 | [[package]] 800 | name = "parse_int" 801 | version = "0.6.0" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "2d695b79916a2c08bcff7be7647ab60d1402885265005a6658ffe6d763553c5a" 804 | dependencies = [ 805 | "num-traits", 806 | ] 807 | 808 | [[package]] 809 | name = "pkg-config" 810 | version = "0.3.27" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" 813 | 814 | [[package]] 815 | name = "pretty_env_logger" 816 | version = "0.5.0" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" 819 | dependencies = [ 820 | "env_logger", 821 | "log", 822 | ] 823 | 824 | [[package]] 825 | name = "proc-macro-crate" 826 | version = "1.3.1" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 829 | dependencies = [ 830 | "once_cell", 831 | "toml_edit 0.19.15", 832 | ] 833 | 834 | [[package]] 835 | name = "proc-macro2" 836 | version = "1.0.69" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" 839 | dependencies = [ 840 | "unicode-ident", 841 | ] 842 | 843 | [[package]] 844 | name = "quote" 845 | version = "1.0.33" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" 848 | dependencies = [ 849 | "proc-macro2", 850 | ] 851 | 852 | [[package]] 853 | name = "radium" 854 | version = "0.7.0" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" 857 | 858 | [[package]] 859 | name = "regex" 860 | version = "1.10.2" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" 863 | dependencies = [ 864 | "aho-corasick", 865 | "memchr", 866 | "regex-automata", 867 | "regex-syntax", 868 | ] 869 | 870 | [[package]] 871 | name = "regex-automata" 872 | version = "0.4.3" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" 875 | dependencies = [ 876 | "aho-corasick", 877 | "memchr", 878 | "regex-syntax", 879 | ] 880 | 881 | [[package]] 882 | name = "regex-syntax" 883 | version = "0.8.2" 884 | source = "registry+https://github.com/rust-lang/crates.io-index" 885 | checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 886 | 887 | [[package]] 888 | name = "rustc-demangle" 889 | version = "0.1.23" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 892 | 893 | [[package]] 894 | name = "rustc_version" 895 | version = "0.4.0" 896 | source = "registry+https://github.com/rust-lang/crates.io-index" 897 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 898 | dependencies = [ 899 | "semver", 900 | ] 901 | 902 | [[package]] 903 | name = "rustix" 904 | version = "0.37.27" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" 907 | dependencies = [ 908 | "bitflags 1.3.2", 909 | "errno", 910 | "io-lifetimes", 911 | "libc", 912 | "linux-raw-sys", 913 | "windows-sys", 914 | ] 915 | 916 | [[package]] 917 | name = "rustversion" 918 | version = "1.0.14" 919 | source = "registry+https://github.com/rust-lang/crates.io-index" 920 | checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" 921 | 922 | [[package]] 923 | name = "ryu" 924 | version = "1.0.15" 925 | source = "registry+https://github.com/rust-lang/crates.io-index" 926 | checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" 927 | 928 | [[package]] 929 | name = "scopeguard" 930 | version = "1.2.0" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 933 | 934 | [[package]] 935 | name = "semver" 936 | version = "1.0.20" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" 939 | 940 | [[package]] 941 | name = "serde" 942 | version = "1.0.190" 943 | source = "registry+https://github.com/rust-lang/crates.io-index" 944 | checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" 945 | dependencies = [ 946 | "serde_derive", 947 | ] 948 | 949 | [[package]] 950 | name = "serde_derive" 951 | version = "1.0.190" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" 954 | dependencies = [ 955 | "proc-macro2", 956 | "quote", 957 | "syn 2.0.38", 958 | ] 959 | 960 | [[package]] 961 | name = "serde_plain" 962 | version = "1.0.2" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" 965 | dependencies = [ 966 | "serde", 967 | ] 968 | 969 | [[package]] 970 | name = "serde_spanned" 971 | version = "0.6.4" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" 974 | dependencies = [ 975 | "serde", 976 | ] 977 | 978 | [[package]] 979 | name = "serialport" 980 | version = "4.2.2" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | checksum = "c32634e2bd4311420caa504404a55fad2131292c485c97014cbed89a5899885f" 983 | dependencies = [ 984 | "CoreFoundation-sys", 985 | "IOKit-sys", 986 | "bitflags 2.0.2", 987 | "cfg-if", 988 | "libudev", 989 | "mach2", 990 | "nix", 991 | "regex", 992 | "scopeguard", 993 | "winapi", 994 | ] 995 | 996 | [[package]] 997 | name = "sha2" 998 | version = "0.10.8" 999 | source = "registry+https://github.com/rust-lang/crates.io-index" 1000 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1001 | dependencies = [ 1002 | "cfg-if", 1003 | "cpufeatures", 1004 | "digest", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "slip-codec" 1009 | version = "0.3.4" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | checksum = "399892aa22101014dcebb84944dc950f6d02695e91ea5f7e11baf02998fc59e2" 1012 | 1013 | [[package]] 1014 | name = "smawk" 1015 | version = "0.3.2" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" 1018 | 1019 | [[package]] 1020 | name = "spin" 1021 | version = "0.9.8" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1024 | dependencies = [ 1025 | "lock_api", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "stable_deref_trait" 1030 | version = "1.2.0" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1033 | 1034 | [[package]] 1035 | name = "strsim" 1036 | version = "0.10.0" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1039 | 1040 | [[package]] 1041 | name = "strum" 1042 | version = "0.24.1" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" 1045 | dependencies = [ 1046 | "strum_macros 0.24.3", 1047 | ] 1048 | 1049 | [[package]] 1050 | name = "strum" 1051 | version = "0.25.0" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" 1054 | dependencies = [ 1055 | "strum_macros 0.25.3", 1056 | ] 1057 | 1058 | [[package]] 1059 | name = "strum_macros" 1060 | version = "0.24.3" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" 1063 | dependencies = [ 1064 | "heck", 1065 | "proc-macro2", 1066 | "quote", 1067 | "rustversion", 1068 | "syn 1.0.109", 1069 | ] 1070 | 1071 | [[package]] 1072 | name = "strum_macros" 1073 | version = "0.25.3" 1074 | source = "registry+https://github.com/rust-lang/crates.io-index" 1075 | checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" 1076 | dependencies = [ 1077 | "heck", 1078 | "proc-macro2", 1079 | "quote", 1080 | "rustversion", 1081 | "syn 2.0.38", 1082 | ] 1083 | 1084 | [[package]] 1085 | name = "supports-color" 1086 | version = "2.1.0" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89" 1089 | dependencies = [ 1090 | "is-terminal", 1091 | "is_ci", 1092 | ] 1093 | 1094 | [[package]] 1095 | name = "supports-hyperlinks" 1096 | version = "2.1.0" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | checksum = "f84231692eb0d4d41e4cdd0cabfdd2e6cd9e255e65f80c9aa7c98dd502b4233d" 1099 | dependencies = [ 1100 | "is-terminal", 1101 | ] 1102 | 1103 | [[package]] 1104 | name = "supports-unicode" 1105 | version = "2.0.0" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "4b6c2cb240ab5dd21ed4906895ee23fe5a48acdbd15a3ce388e7b62a9b66baf7" 1108 | dependencies = [ 1109 | "is-terminal", 1110 | ] 1111 | 1112 | [[package]] 1113 | name = "syn" 1114 | version = "1.0.109" 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" 1116 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 1117 | dependencies = [ 1118 | "proc-macro2", 1119 | "quote", 1120 | "unicode-ident", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "syn" 1125 | version = "2.0.38" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" 1128 | dependencies = [ 1129 | "proc-macro2", 1130 | "quote", 1131 | "unicode-ident", 1132 | ] 1133 | 1134 | [[package]] 1135 | name = "tap" 1136 | version = "1.0.1" 1137 | source = "registry+https://github.com/rust-lang/crates.io-index" 1138 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 1139 | 1140 | [[package]] 1141 | name = "termcolor" 1142 | version = "1.3.0" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" 1145 | dependencies = [ 1146 | "winapi-util", 1147 | ] 1148 | 1149 | [[package]] 1150 | name = "terminal_size" 1151 | version = "0.1.17" 1152 | source = "registry+https://github.com/rust-lang/crates.io-index" 1153 | checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" 1154 | dependencies = [ 1155 | "libc", 1156 | "winapi", 1157 | ] 1158 | 1159 | [[package]] 1160 | name = "textwrap" 1161 | version = "0.15.2" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d" 1164 | dependencies = [ 1165 | "smawk", 1166 | "unicode-linebreak", 1167 | "unicode-width", 1168 | ] 1169 | 1170 | [[package]] 1171 | name = "thiserror" 1172 | version = "1.0.50" 1173 | source = "registry+https://github.com/rust-lang/crates.io-index" 1174 | checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" 1175 | dependencies = [ 1176 | "thiserror-impl", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "thiserror-impl" 1181 | version = "1.0.50" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" 1184 | dependencies = [ 1185 | "proc-macro2", 1186 | "quote", 1187 | "syn 2.0.38", 1188 | ] 1189 | 1190 | [[package]] 1191 | name = "toml" 1192 | version = "0.8.6" 1193 | source = "registry+https://github.com/rust-lang/crates.io-index" 1194 | checksum = "8ff9e3abce27ee2c9a37f9ad37238c1bdd4e789c84ba37df76aa4d528f5072cc" 1195 | dependencies = [ 1196 | "serde", 1197 | "serde_spanned", 1198 | "toml_datetime", 1199 | "toml_edit 0.20.7", 1200 | ] 1201 | 1202 | [[package]] 1203 | name = "toml_datetime" 1204 | version = "0.6.5" 1205 | source = "registry+https://github.com/rust-lang/crates.io-index" 1206 | checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" 1207 | dependencies = [ 1208 | "serde", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "toml_edit" 1213 | version = "0.19.15" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 1216 | dependencies = [ 1217 | "indexmap", 1218 | "toml_datetime", 1219 | "winnow", 1220 | ] 1221 | 1222 | [[package]] 1223 | name = "toml_edit" 1224 | version = "0.20.7" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" 1227 | dependencies = [ 1228 | "indexmap", 1229 | "serde", 1230 | "serde_spanned", 1231 | "toml_datetime", 1232 | "winnow", 1233 | ] 1234 | 1235 | [[package]] 1236 | name = "typenum" 1237 | version = "1.17.0" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 1240 | 1241 | [[package]] 1242 | name = "unicode-ident" 1243 | version = "1.0.12" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1246 | 1247 | [[package]] 1248 | name = "unicode-linebreak" 1249 | version = "0.1.5" 1250 | source = "registry+https://github.com/rust-lang/crates.io-index" 1251 | checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 1252 | 1253 | [[package]] 1254 | name = "unicode-width" 1255 | version = "0.1.11" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" 1258 | 1259 | [[package]] 1260 | name = "utf8parse" 1261 | version = "0.2.1" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 1264 | 1265 | [[package]] 1266 | name = "version_check" 1267 | version = "0.9.4" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1270 | 1271 | [[package]] 1272 | name = "winapi" 1273 | version = "0.3.9" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1276 | dependencies = [ 1277 | "winapi-i686-pc-windows-gnu", 1278 | "winapi-x86_64-pc-windows-gnu", 1279 | ] 1280 | 1281 | [[package]] 1282 | name = "winapi-i686-pc-windows-gnu" 1283 | version = "0.4.0" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1286 | 1287 | [[package]] 1288 | name = "winapi-util" 1289 | version = "0.1.6" 1290 | source = "registry+https://github.com/rust-lang/crates.io-index" 1291 | checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" 1292 | dependencies = [ 1293 | "winapi", 1294 | ] 1295 | 1296 | [[package]] 1297 | name = "winapi-x86_64-pc-windows-gnu" 1298 | version = "0.4.0" 1299 | source = "registry+https://github.com/rust-lang/crates.io-index" 1300 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1301 | 1302 | [[package]] 1303 | name = "windows-sys" 1304 | version = "0.48.0" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1307 | dependencies = [ 1308 | "windows-targets", 1309 | ] 1310 | 1311 | [[package]] 1312 | name = "windows-targets" 1313 | version = "0.48.5" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1316 | dependencies = [ 1317 | "windows_aarch64_gnullvm", 1318 | "windows_aarch64_msvc", 1319 | "windows_i686_gnu", 1320 | "windows_i686_msvc", 1321 | "windows_x86_64_gnu", 1322 | "windows_x86_64_gnullvm", 1323 | "windows_x86_64_msvc", 1324 | ] 1325 | 1326 | [[package]] 1327 | name = "windows_aarch64_gnullvm" 1328 | version = "0.48.5" 1329 | source = "registry+https://github.com/rust-lang/crates.io-index" 1330 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1331 | 1332 | [[package]] 1333 | name = "windows_aarch64_msvc" 1334 | version = "0.48.5" 1335 | source = "registry+https://github.com/rust-lang/crates.io-index" 1336 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1337 | 1338 | [[package]] 1339 | name = "windows_i686_gnu" 1340 | version = "0.48.5" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1343 | 1344 | [[package]] 1345 | name = "windows_i686_msvc" 1346 | version = "0.48.5" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1349 | 1350 | [[package]] 1351 | name = "windows_x86_64_gnu" 1352 | version = "0.48.5" 1353 | source = "registry+https://github.com/rust-lang/crates.io-index" 1354 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1355 | 1356 | [[package]] 1357 | name = "windows_x86_64_gnullvm" 1358 | version = "0.48.5" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1361 | 1362 | [[package]] 1363 | name = "windows_x86_64_msvc" 1364 | version = "0.48.5" 1365 | source = "registry+https://github.com/rust-lang/crates.io-index" 1366 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1367 | 1368 | [[package]] 1369 | name = "winnow" 1370 | version = "0.5.18" 1371 | source = "registry+https://github.com/rust-lang/crates.io-index" 1372 | checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32" 1373 | dependencies = [ 1374 | "memchr", 1375 | ] 1376 | 1377 | [[package]] 1378 | name = "wyz" 1379 | version = "0.5.1" 1380 | source = "registry+https://github.com/rust-lang/crates.io-index" 1381 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" 1382 | dependencies = [ 1383 | "tap", 1384 | ] 1385 | 1386 | [[package]] 1387 | name = "xmas-elf" 1388 | version = "0.9.0" 1389 | source = "registry+https://github.com/rust-lang/crates.io-index" 1390 | checksum = "f820cc767d65b32eef9d7ce7201448f28501c59edc55d47b71375fea579fc2df" 1391 | dependencies = [ 1392 | "zero", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "zero" 1397 | version = "0.1.3" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | checksum = "2fe21bcc34ca7fe6dd56cc2cb1261ea59d6b93620215aefb5ea6032265527784" 1400 | --------------------------------------------------------------------------------