Skip to content

Add no_std support w/ alloc & embedded-io #834

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Remove serde from no_std
  • Loading branch information
ferris committed Apr 7, 2025
commit bacd4f3b8aa81f5700eaaa378154c637e4b845d0
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions espflash/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ md-5 = { version = "0.10.6", default-features = false}
miette = { version = "7.4.0", optional = true}
object = { version = "0.36.7", default-features = false, features = ['read'] }
regex = { version = "1.11.1", optional = true }
serde = { version = "1.0.217", features = ["derive"], default-features = false }
serde = { version = "1.0.219", features = ["derive"], optional = true }
serialport = { version = "4.7.0", default-features = false, optional = true }
sha2 = { version = "0.10.8", default-features = false}
slip-codec = { version = "0.4.0", optional = true }
Expand Down Expand Up @@ -85,4 +85,4 @@ cli = [
# Enables connecting to a device via serial port
serialport = ["dep:regex", "dep:serialport", "dep:slip-codec", "dep:toml", "std"]

std = ["dep:miette", "dep:flate2", "object/default", "serde/std", "thiserror/std", "strum/std", "esp-idf-part/std", "md-5/std", "sha2/std", "base64/std", "embedded-io/std", "embedded-io-adapters/std"]
std = ["dep:miette", "dep:flate2", "object/default", "dep:serde", "thiserror/std", "strum/std", "esp-idf-part/std", "md-5/std", "sha2/std", "base64/std", "embedded-io/std", "embedded-io-adapters/std"]
86 changes: 34 additions & 52 deletions espflash/src/flasher/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ use log::{debug, info, warn};
use md5::{Digest, Md5};
#[cfg(feature = "serialport")]
use object::{read::elf::ElfFile32 as ElfFile, Endianness};

#[cfg(feature = "std")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "serialport")]
use serialport::UsbPortInfo;
Expand Down Expand Up @@ -233,57 +235,46 @@ impl fmt::Display for SecurityInfo {
///
/// Note that not all frequencies are supported by each target device.
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[derive(
Debug,
Default,
Clone,
Copy,
Hash,
PartialEq,
Eq,
Display,
VariantNames,
Serialize,
Deserialize,
PartialOrd,
Ord,
Debug, Default, Clone, Copy, Hash, PartialEq, Eq, Display, VariantNames, PartialOrd, Ord,
)]
#[non_exhaustive]
#[repr(u8)]
pub enum FlashFrequency {
/// 12 MHz
#[serde(rename = "12MHz")]
#[cfg_attr(feature = "std", serde(rename = "12MHz"))]
_12Mhz,
/// 15 MHz
#[serde(rename = "15MHz")]
#[cfg_attr(feature = "std", serde(rename = "15MHz"))]
_15Mhz,
/// 16 MHz
#[serde(rename = "16MHz")]
#[cfg_attr(feature = "std", serde(rename = "16MHz"))]
_16Mhz,
/// 20 MHz
#[serde(rename = "20MHz")]
#[cfg_attr(feature = "std", serde(rename = "20MHz"))]
_20Mhz,
/// 24 MHz
#[serde(rename = "24MHz")]
#[cfg_attr(feature = "std", serde(rename = "24MHz"))]
_24Mhz,
/// 26 MHz
#[serde(rename = "26MHz")]
#[cfg_attr(feature = "std", serde(rename = "26MHz"))]
_26Mhz,
/// 30 MHz
#[serde(rename = "30MHz")]
#[cfg_attr(feature = "std", serde(rename = "30MHz"))]
_30Mhz,
/// 40 MHz
#[serde(rename = "40MHz")]
#[cfg_attr(feature = "std", serde(rename = "40MHz"))]
#[default]
_40Mhz,
/// 48 MHz
#[serde(rename = "48MHz")]
#[cfg_attr(feature = "std", serde(rename = "48MHz"))]
_48Mhz,
/// 60 MHz
#[serde(rename = "60MHz")]
#[cfg_attr(feature = "std", serde(rename = "60MHz"))]
_60Mhz,
/// 80 MHz
#[serde(rename = "80MHz")]
#[cfg_attr(feature = "std", serde(rename = "80MHz"))]
_80Mhz,
}

Expand All @@ -304,10 +295,11 @@ impl FlashFrequency {

/// Supported flash modes
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
#[derive(Copy, Clone, Debug, Default, VariantNames, Serialize, Deserialize)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[derive(Copy, Clone, Debug, Default, VariantNames)]
#[non_exhaustive]
#[strum(serialize_all = "lowercase")]
#[serde(rename_all = "lowercase")]
#[cfg_attr(feature = "std", serde(rename_all = "lowercase"))]
pub enum FlashMode {
/// Quad I/O (4 pins used for address & data)
Qio,
Expand All @@ -324,57 +316,46 @@ pub enum FlashMode {
///
/// Note that not all sizes are supported by each target device.
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
#[derive(
Clone,
Copy,
Debug,
Default,
Eq,
PartialEq,
Display,
VariantNames,
EnumIter,
Serialize,
Deserialize,
)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Display, VariantNames, EnumIter)]
#[non_exhaustive]
#[repr(u8)]
#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
#[doc(alias("esp_image_flash_size_t"))]
pub enum FlashSize {
/// 256 KB
#[serde(rename = "256KB")]
#[cfg_attr(feature = "std", serde(rename = "256KB"))]
_256Kb,
/// 512 KB
#[serde(rename = "512KB")]
#[cfg_attr(feature = "std", serde(rename = "512KB"))]
_512Kb,
/// 1 MB
#[serde(rename = "1MB")]
#[cfg_attr(feature = "std", serde(rename = "1MB"))]
_1Mb,
/// 2 MB
#[serde(rename = "2MB")]
#[cfg_attr(feature = "std", serde(rename = "2MB"))]
_2Mb,
/// 4 MB
#[default]
#[serde(rename = "4MB")]
#[cfg_attr(feature = "std", serde(rename = "4MB"))]
_4Mb,
/// 8 MB
#[serde(rename = "8MB")]
#[cfg_attr(feature = "std", serde(rename = "8MB"))]
_8Mb,
/// 16 MB
#[serde(rename = "16MB")]
#[cfg_attr(feature = "std", serde(rename = "16MB"))]
_16Mb,
/// 32 MB
#[serde(rename = "32MB")]
#[cfg_attr(feature = "std", serde(rename = "32MB"))]
_32Mb,
/// 64 MB
#[serde(rename = "64MB")]
#[cfg_attr(feature = "std", serde(rename = "64MB"))]
_64Mb,
/// 128 MB
#[serde(rename = "128MB")]
#[cfg_attr(feature = "std", serde(rename = "128MB"))]
_128Mb,
/// 256 MB
#[serde(rename = "256MB")]
#[cfg_attr(feature = "std", serde(rename = "256MB"))]
_256Mb,
}

Expand Down Expand Up @@ -456,12 +437,13 @@ impl FromStr for FlashSize {
}

/// Flash settings to use when flashing a device
#[derive(Copy, Clone, Debug, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[derive(Copy, Clone, Debug, Default)]
#[non_exhaustive]
pub struct FlashSettings {
pub mode: Option<FlashMode>,
pub size: Option<FlashSize>,
#[serde(rename = "frequency")]
#[cfg_attr(feature = "std", serde(rename = "frequency"))]
pub freq: Option<FlashFrequency>,
}

Expand Down
6 changes: 3 additions & 3 deletions espflash/src/targets/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use alloc::boxed::Box;
use alloc::collections::BTreeMap;
use alloc::format;

#[cfg(feature = "std")]
use serde::{Deserialize, Serialize};
use strum::{Display, EnumIter, EnumString, VariantNames};

Expand Down Expand Up @@ -45,9 +46,8 @@ pub(crate) mod flash_target;
///
/// Note that not all frequencies are supported by each target device.
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
#[derive(
Debug, Default, Clone, Copy, Hash, PartialEq, Eq, Display, VariantNames, Serialize, Deserialize,
)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize,))]
#[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq, Display, VariantNames)]
#[non_exhaustive]
#[repr(u32)]
pub enum XtalFrequency {
Expand Down
Loading