Skip to content

Commit 2c6f25f

Browse files
authored
Merge pull request #216 from ryankurte/feature/flash-stubs
enable support for loader stubs (via --use-stub arg)
2 parents 00c47eb + d15beb5 commit 2c6f25f

28 files changed

+498
-49
lines changed

Cargo.lock

Lines changed: 107 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cargo-espflash/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@ pkg-fmt = "zip"
3232
[dependencies]
3333
cargo_metadata = "0.15"
3434
cargo_toml = "0.11"
35-
clap = { version = "3.2", features = ["derive"] }
35+
clap = { version = "3.2", features = ["derive", "env"] }
3636
espflash = { version = "=1.6.1-dev", path = "../espflash" }
37+
log = "0.4.17"
3738
miette = { version = "5.2", features = ["fancy"] }
3839
serde = { version = "1.0", features = ["derive"] }
3940
strum = "0.24"
4041
thiserror = "1.0"
42+
tracing-subscriber = { version = "0.3.11", features = [ "env-filter" ] }
4143
toml = "0.5"

cargo-espflash/src/main.rs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ use espflash::{
1515
},
1616
Chip, Config, ImageFormatId,
1717
};
18+
use log::debug;
1819
use miette::{IntoDiagnostic, Result, WrapErr};
1920
use strum::VariantNames;
21+
use tracing_subscriber::{filter::LevelFilter, EnvFilter};
2022

2123
use crate::{
2224
cargo_config::{parse_cargo_config, CargoConfig},
@@ -28,19 +30,23 @@ mod cargo_config;
2830
mod error;
2931
mod package_metadata;
3032

31-
#[derive(Parser)]
33+
#[derive(Debug, Clone, Parser)]
3234
#[clap(bin_name = "cargo", version, propagate_version = true)]
3335
struct Opts {
3436
#[clap(subcommand)]
3537
subcommand: CargoSubCommand,
38+
39+
/// Log level
40+
#[clap(long, default_value = "info", env)]
41+
log_level: LevelFilter,
3642
}
3743

38-
#[derive(Parser)]
44+
#[derive(Debug, Clone, Parser)]
3945
enum CargoSubCommand {
4046
Espflash(EspFlashOpts),
4147
}
4248

43-
#[derive(Parser)]
49+
#[derive(Debug, Clone, Parser)]
4450
struct EspFlashOpts {
4551
#[clap(flatten)]
4652
flash_opts: FlashOpts,
@@ -52,7 +58,7 @@ struct EspFlashOpts {
5258
subcommand: Option<SubCommand>,
5359
}
5460

55-
#[derive(Parser)]
61+
#[derive(Debug, Clone, Parser)]
5662
pub enum SubCommand {
5763
/// Display information about the connected board and exit without flashing
5864
BoardInfo(ConnectOpts),
@@ -64,7 +70,7 @@ pub enum SubCommand {
6470
PartitionTable(PartitionTableOpts),
6571
}
6672

67-
#[derive(Parser)]
73+
#[derive(Debug, Clone, Parser)]
6874
pub struct BuildOpts {
6975
/// Build the application using the release profile
7076
#[clap(long)]
@@ -100,7 +106,7 @@ pub struct BuildOpts {
100106
pub flash_config_opts: FlashConfigOpts,
101107
}
102108

103-
#[derive(Parser)]
109+
#[derive(Debug, Clone, Parser)]
104110
pub struct SaveImageOpts {
105111
#[clap(flatten)]
106112
pub build_opts: BuildOpts,
@@ -125,8 +131,20 @@ fn main() -> Result<()> {
125131

126132
check_for_updates(env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"));
127133

128-
let CargoSubCommand::Espflash(opts) = Opts::parse().subcommand;
134+
// Parse options
135+
let opts = Opts::parse();
136+
137+
// Setup logging
138+
tracing_subscriber::fmt()
139+
.with_env_filter(EnvFilter::from_default_env().add_directive(opts.log_level.into()))
140+
.init();
141+
142+
// Extract subcommand
143+
let CargoSubCommand::Espflash(opts) = opts.subcommand;
144+
145+
debug!("subcommand options: {:?}", opts);
129146

147+
// Load configuration and metadata
130148
let config = Config::load()?;
131149
let metadata = CargoEspFlashMeta::load("Cargo.toml")?;
132150
let cargo_config = parse_cargo_config(".")?;

espflash/Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ bin-dir = "{ bin }{ binary-ext }"
2929
pkg-fmt = "zip"
3030

3131
[dependencies]
32+
base64 = "0.13.0"
3233
binread = "2.2"
3334
bytemuck = { version = "1.11", features = ["derive"] }
34-
clap = { version = "3.2", features = ["derive"] }
35+
clap = { version = "3.2", features = ["derive", "env"] }
3536
comfy-table = "6.0"
3637
crossterm = "0.24"
3738
csv = "1.1"
@@ -40,15 +41,18 @@ directories-next = "2.0"
4041
espmonitor = "0.10"
4142
flate2 = "1.0"
4243
indicatif = "0.17"
44+
log = "0.4.17"
4345
maplit = "1.0"
4446
md5 = "0.7"
4547
miette = { version = "5.2", features = ["fancy"] }
4648
parse_int = "0.6"
4749
regex = "1.6"
4850
serde = { version = "1.0", features = ["derive"] }
4951
serde-hex = "0.1"
52+
serde_json = "1.0.83"
5053
serde_plain = "1.0"
5154
serialport = "4.2"
55+
tracing-subscriber = { version = "0.3.11", features = [ "env-filter" ] }
5256
sha2 = "0.10"
5357
slip-codec = "0.3"
5458
strum = "0.24"

espflash/src/chip/mod.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{collections::HashMap, ops::Range, str::FromStr};
22

33
use maplit::hashmap;
4-
use strum_macros::{Display, EnumVariantNames};
4+
use strum_macros::{Display, EnumIter, EnumVariantNames};
55

66
pub use self::{
77
esp32::{Esp32, Esp32Params, Esp32c2, Esp32c3, Esp32s2, Esp32s3},
@@ -143,7 +143,7 @@ impl SpiRegisters {
143143
}
144144
}
145145

146-
#[derive(Debug, Copy, Clone, Eq, PartialEq, Display, EnumVariantNames)]
146+
#[derive(Debug, Copy, Clone, Eq, PartialEq, Display, EnumVariantNames, EnumIter)]
147147
pub enum Chip {
148148
#[strum(serialize = "ESP32")]
149149
Esp32,
@@ -299,10 +299,14 @@ impl Chip {
299299
Box::new(RamTarget::new(entry))
300300
}
301301

302-
pub fn flash_target(&self, spi_params: SpiAttachParams) -> Box<dyn FlashTarget> {
302+
pub fn flash_target(
303+
&self,
304+
spi_params: SpiAttachParams,
305+
use_stub: bool,
306+
) -> Box<dyn FlashTarget> {
303307
match self {
304308
Chip::Esp8266 => Box::new(Esp8266Target::new()),
305-
_ => Box::new(Esp32Target::new(*self, spi_params)),
309+
_ => Box::new(Esp32Target::new(*self, spi_params, use_stub)),
306310
}
307311
}
308312

0 commit comments

Comments
 (0)