Skip to content
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

Update esp-hal, esp-wifi, esp-idf and edge-net dependencies #63

Merged
merged 13 commits into from
Jan 9, 2025
Merged
4 changes: 0 additions & 4 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,13 @@ runner = "espflash flash --monitor --baud 921600"
rustflags = [
"-C", "link-arg=-Tlinkall.x",
"-C", "link-arg=-nostartfiles",
"-C", "link-arg=-Trom_functions.x",
]

[target.riscv32imc-unknown-none-elf]
runner = "espflash flash --monitor --baud 921600"

rustflags = [
"-C", "link-arg=-Tlinkall.x",
"-C", "link-arg=-Trom_functions.x",

# Required to obtain backtraces (e.g. when using the "esp-backtrace" crate.)
# NOTE: May negatively impact performance of produced code
Expand All @@ -39,7 +37,6 @@ runner = "espflash flash --monitor --baud 921600"
rustflags = [
#"-C", "linker=rust-lld",
"-C", "link-arg=-Tlinkall.x",
"-C", "link-arg=-Trom_functions.x",
]

[target.xtensa-esp32s3-none-elf]
Expand All @@ -48,7 +45,6 @@ runner = "espflash flash --monitor --baud 921600"
rustflags = [
"-C", "link-arg=-Tlinkall.x",
"-C", "link-arg=-nostartfiles",
"-C", "link-arg=-Trom_functions.x",
]

[target.'cfg(target_os = "espidf")']
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
- uses: dtolnay/rust-toolchain@v1
with:
target: riscv32imc-unknown-none-elf
toolchain: nightly-2024-07-22
toolchain: nightly-2024-12-01
components: rust-src,rustfmt
- uses: esp-rs/[email protected]
with:
Expand Down
52 changes: 24 additions & 28 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,30 +24,40 @@ opt-level = "z"
opt-level = 3

[dependencies]
esp-hal = { version = "0.21.0", optional = true }
esp-hal = { version = "0.22.0", optional = true }
esp-backtrace = { version = "0.14.0", optional = true, features = [
"panic-handler",
"println",
"exception-handler",
] }
esp-println = { version = "0.12.0", optional = true, features = ["log"] }
esp-hal-embassy = { version = "0.4.0", optional = true }
esp-hal-embassy = { version = "0.5.0", optional = true }

embassy-time = { version = "0.3.0", optional = true }
embassy-executor = { version = "=0.6.0", package = "embassy-executor", features = [
embassy-executor = { version = "0.6", package = "embassy-executor", features = [
"nightly",
"integrated-timers",
], optional = true }
embassy-net = { version = "0.4.0", features = [
embassy-net = { version = "0.5.0", features = [
"tcp",
"udp",
"dhcpv4",
"medium-ethernet",
], optional = true }

esp-wifi = { version = "0.10.1", optional = true, features = ["phy-enable-usb", "wifi-default", "sys-logs"] }
smoltcp = { version = "0.11.0", optional = true, default-features = false, features = [
"proto-igmp",
esp-wifi = { version = "0.11.0", optional = true, features = ["sys-logs", "utils", "wifi"] }
blocking-network-stack = { git = "https://github.com/bjoernQ/blocking-network-stack", rev = "1c581661d78e0cf0f17b936297179b993fb149d7" }
smoltcp11 = { package = "smoltcp", version = "0.11.0", optional = true, default-features = false, features = [
"proto-ipv4",
"socket-tcp",
"socket-icmp",
"socket-udp",
"medium-ethernet",
"proto-dhcpv4",
"socket-raw",
"socket-dhcpv4",
] }
smoltcp = { version = "0.12.0", optional = true, default-features = false, features = [
"proto-ipv4",
"socket-tcp",
"socket-icmp",
Expand All @@ -66,15 +76,15 @@ static_cell = { version = "2.1", features = ["nightly"] }

esp-mbedtls = { path = "./esp-mbedtls" }

edge-http = { version = "0.3.0", optional = true }
edge-nal = { version = "0.3.0", optional = true }
edge-nal-embassy = { version = "0.3.0", optional = true }
edge-http = { version = "0.4.0", optional = true }
edge-nal = { version = "0.4.0", optional = true }
edge-nal-embassy = { version = "0.4.0", optional = true }
cfg-if = "1.0.0"
esp-alloc = { version = "0.5.0", optional = true}
enumset = { version = "1", default-features = false }

[target.'cfg(target_os = "espidf")'.dependencies]
esp-idf-svc = { version = "0.49.1", features = ["binstart"] }
esp-idf-svc = { version = "0.50", features = ["binstart"] }

[[example]]
name = "crypto_self_test"
Expand Down Expand Up @@ -104,8 +114,8 @@ name = "edge_server"
required-features = ["examples-async", "edge-http"]

[features]
examples = ["esp-hal", "esp-backtrace", "esp-println", "esp-wifi", "smoltcp", "esp-alloc"]
examples-async = ["examples", "esp-hal-embassy", "embassy-time", "embassy-executor", "embassy-net", "edge-http", "edge-nal", "edge-nal-embassy", "esp-wifi/async", "esp-wifi/embassy-net", "esp-mbedtls/async", "esp-mbedtls/edge-nal"]
examples = ["esp-hal", "esp-backtrace", "esp-println", "esp-wifi", "smoltcp", "smoltcp11", "esp-alloc"]
examples-async = ["examples", "esp-hal-embassy", "embassy-time", "embassy-executor", "embassy-net", "edge-http", "edge-nal", "edge-nal-embassy", "esp-mbedtls/async", "esp-mbedtls/edge-nal"]
examples-std = ["critical-section/std"]

esp32 = [
Expand Down Expand Up @@ -142,18 +152,4 @@ esp32s3 = [
]

[build-dependencies]
embuild = { version = "0.32", features = ["espidf"] }

# Patch until new release
[patch.crates-io]
edge-http = { git = "https://github.com/ivmarkov/edge-net" }
edge-nal = { git = "https://github.com/ivmarkov/edge-net" }
edge-nal-embassy = { git = "https://github.com/ivmarkov/edge-net" }
esp-idf-svc = { git = "https://github.com/esp-rs/esp-idf-svc" }
esp-idf-hal = { git = "https://github.com/esp-rs/esp-idf-hal" }
esp-idf-sys = { git = "https://github.com/esp-rs/esp-idf-sys" }

# Patch before 0.6.0 got yanked
embassy-executor = { git = "https://github.com/embassy-rs/embassy", rev = "886580179ff250e15b0fad6448e8ebed6cdabf2b" }
embassy-time-driver = { git = "https://github.com/embassy-rs/embassy", rev = "886580179ff250e15b0fad6448e8ebed6cdabf2b" }
embassy-time-queue-driver = { git = "https://github.com/embassy-rs/embassy", rev = "886580179ff250e15b0fad6448e8ebed6cdabf2b" }
embuild = { version = "0.33", features = ["espidf"] }
8 changes: 4 additions & 4 deletions esp-mbedtls-sys/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,22 @@ rust-version = "1.82"

[build-dependencies]
anyhow = "1.0.68"
bindgen = "0.68.1"
bindgen = "0.71.1"
env_logger = "0.10.0"
log = "0.4.17"
cmake = "0.1.52"
fs_extra = "1.3.0"
embuild = "0.32"
embuild = "0.33"

[dependencies]
# For malloc/free
# TODO: Replace with `esp-alloc` once `esp-alloc` starts to provide `malloc` and `free` in future
# ... or switch to our own `mbedtls_malloc/free`
esp-wifi = { version = "0.10.1", default-features = false, optional = true }
esp-wifi = { version = "0.11.0", default-features = false, optional = true }

# ESP-IDF: The mbedtls lib distributed with ESP-IDF is used
[target.'cfg(target_os = "espidf")'.dependencies]
esp-idf-sys = { version = "0.35", default-features = false }
esp-idf-sys = { version = "0.36", default-features = false }

# All other platforms: mbedtls libs and bindings are created on the fly

Expand Down
9 changes: 5 additions & 4 deletions esp-mbedtls/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,22 @@ log = { version = "0.4.17", default-features = false }
enumset = { version = "1", default-features = false }
embedded-io = { version = "0.6.1" }
embedded-io-async = { version = "0.6.0", optional = true }
esp-hal = { version = "0.21.0", optional = true }
esp-hal = { version = "0.22.0", optional = true }
# For malloc/free
# TODO: Replace with `esp-alloc` once `esp-alloc` starts to provide `malloc` and `free` in future
# ... or switch to our own `mbedtls_malloc/free`
esp-wifi = { version = "0.10.1", default-features = false, optional = true }
esp-wifi = { version = "0.11.0", default-features = false, optional = true }
cfg-if = "1.0.0"
edge-nal = { version = "0.3.0", optional = true }
edge-nal = { version = "0.4.0", optional = true }
critical-section = "1.1.3"
crypto-bigint = { version = "0.5.3", optional = true, default-features = false, features = ["extra-sizes"] }
tinyrlibc = { version = "0.5", optional = true, default-features = false }

[features]
default = ["edge-nal"]
async = ["dep:embedded-io-async"]
esp32 = ["esp-hal/esp32", "esp-wifi/esp32", "esp-mbedtls-sys/esp32", "crypto-bigint"]
esp32c3 = ["esp-hal/esp32c3", "esp-wifi/esp32c3", "esp-mbedtls-sys/esp32c3", "crypto-bigint"]
esp32c3 = ["esp-hal/esp32c3", "esp-wifi/esp32c3", "esp-mbedtls-sys/esp32c3", "crypto-bigint", "tinyrlibc/memchr"]
esp32s2 = ["esp-hal/esp32s2", "esp-wifi/esp32s2", "esp-mbedtls-sys/esp32s2", "crypto-bigint"]
esp32s3 = ["esp-hal/esp32s3", "esp-wifi/esp32s3", "esp-mbedtls-sys/esp32s3", "crypto-bigint"]

Expand Down
29 changes: 27 additions & 2 deletions esp-mbedtls/src/edge_nal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,10 @@ where
T: edge_nal::TcpAccept,
{
type Error = TlsError;
type Socket<'a> = Session<'a, T::Socket<'a>> where Self: 'a;
type Socket<'a>
= Session<'a, T::Socket<'a>>
where
Self: 'a;

async fn accept(
&self,
Expand Down Expand Up @@ -115,7 +118,10 @@ where
{
type Error = TlsError;

type Socket<'a> = Session<'a, T::Socket<'a>> where Self: 'a;
type Socket<'a>
= Session<'a, T::Socket<'a>>
where
Self: 'a;

async fn connect(&self, remote: SocketAddr) -> Result<Self::Socket<'_>, Self::Error> {
let socket = self
Expand Down Expand Up @@ -151,6 +157,25 @@ where
}
}

impl<T> edge_nal::TcpSplit for Session<'_, T>
where
T: edge_nal::TcpSplit + embedded_io_async::Read + embedded_io_async::Write + edge_nal::Readable,
{
type Read<'a>
= Self
where
Self: 'a;

type Write<'a>
= Self
where
Self: 'a;

fn split(&mut self) -> (Self::Read<'_>, Self::Write<'_>) {
panic!("Splitting a TLS session is not supported yet");
}
}

impl<T> edge_nal::TcpShutdown for Session<'_, T>
where
T: embedded_io_async::Read + embedded_io_async::Write + edge_nal::TcpShutdown,
Expand Down
14 changes: 14 additions & 0 deletions esp-mbedtls/src/esp_hal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,17 @@ impl Drop for Tls<'_> {
critical_section::with(|cs| SHARED_SHA.borrow_ref_mut(cs).take());
}
}

// See https://github.com/esp-rs/esp-mbedtls/pull/62#issuecomment-2560830139
// TODO: In future - and for all baremetal platforms - we should be having a definition like the one below
// for **all** libc functions used by `mbedtls`
//
// And then each baremetal platform can decide to opt-in and use the definition(s)
// from `tinyrlibc` or opt-out and provide their own implementation(s)
#[cfg(feature = "esp32c3")]
#[used]
static _MEMCHR: unsafe extern "C" fn(
*const core::ffi::c_void,
core::ffi::c_int,
usize,
) -> *const core::ffi::c_void = tinyrlibc::memchr;
17 changes: 12 additions & 5 deletions esp-mbedtls/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1176,16 +1176,19 @@ pub mod asynch {
F: FnMut(*mut mbedtls_ssl_context) -> i32,
{
loop {
self.flush_write().await?;

let outcome =
core::future::poll_fn(|cx| PollCtx::poll(self, cx, |ssl| f(ssl))).await?;

self.flush_write().await?;

match outcome {
PollOutcome::Success(res) => break Ok(res),
PollOutcome::Success(res) => {
self.flush_write().await?;
break Ok(res);
}
PollOutcome::Retry => continue,
PollOutcome::WantRead => self.wait_read().await?,
PollOutcome::WantWrite => self.flush_write().await?,
PollOutcome::WantWrite => continue,
PollOutcome::Eof => {
self.state = SessionState::Eof;
break Ok(0);
Expand All @@ -1209,6 +1212,8 @@ pub mod asynch {
.map_err(|e| TlsError::Io(e.kind()))?;
if len > 0 {
self.read_byte = Some(buf[0]);
} else {
Err(TlsError::Eof)?;
}
}

Expand All @@ -1230,6 +1235,8 @@ pub mod asynch {
.map_err(|e| TlsError::Io(e.kind()))?;
if len > 0 {
self.write_byte.take();
} else {
Err(TlsError::Eof)?;
}
}

Expand Down Expand Up @@ -1395,7 +1402,7 @@ pub mod asynch {
::log::debug!("Send {}B", buf.len());

if buf.is_empty() {
// MbedTLS does not want us to read anything
// MbedTLS does not want us to write anything
return 0;
}

Expand Down
Loading
Loading