eculocate

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 18970ca82e7ffc99c87173d7df761280359fa6a8
parent 2981f6f4dd1a6bd418c6d9028abccba3d91f6bdf
Author: filipton <filipton12@gmail.com>
Date:   Thu, 23 Jan 2025 18:53:00 +0100

explore: make example flash speed faster (2x in my testing)

Diffstat:
Mexamples/src/main.rs | 34++++++++++++++++++++++++----------
Msimple-ota-server/firmware.bin | 0
Msimple-ota-server/src/main.rs | 2--
3 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/examples/src/main.rs b/examples/src/main.rs @@ -152,19 +152,18 @@ async fn main(spawner: Spawner) { let mut ota = Ota::new(FlashStorage::new()).expect("Cannot create ota"); ota.ota_begin(flash_size, target_crc).unwrap(); - let mut bytes_read = 0; + let mut bytes_read: usize = 0; loop { - let res = socket.read(&mut ota_buff).await; - if let Ok(n) = res { - bytes_read += n; - if n == 0 { + let bytes_to_read = 8192.min(flash_size - bytes_read as u32); + let res = read_exact(&mut socket, &mut ota_buff[..bytes_to_read as usize]).await; + if let Ok(_) = res { + bytes_read += bytes_to_read as usize; + if bytes_to_read == 0 { break; } - let res = ota.ota_write_chunk(&ota_buff[..n]); - if bytes_read % 4096 * 2 == 0 { - _ = socket.write(&[0]).await; - } + let res = ota.ota_write_chunk(&ota_buff[..bytes_to_read as usize]); + _ = socket.write(&[0]).await; match res { Ok(true) => { @@ -187,7 +186,6 @@ async fn main(spawner: Spawner) { } } - Timer::after_millis(10).await; log::info!("Progress: {}%", (ota.get_ota_progress() * 100.0) as u8); } @@ -243,3 +241,19 @@ async fn connection(mut controller: WifiController<'static>, stack: Stack<'stati async fn net_task(mut runner: Runner<'static, WifiDevice<'static, WifiStaDevice>>) { runner.run().await } + +pub async fn read_exact( + socket: &mut TcpSocket<'_>, + mut buf: &mut [u8], +) -> Result<(), embassy_net::tcp::Error> { + while !buf.is_empty() { + match socket.read(buf).await { + Ok(0) => return Err(embassy_net::tcp::Error::ConnectionReset), + Ok(n) => { + buf = &mut buf[n..]; + } + Err(e) => return Err(e), + } + } + Ok(()) +} diff --git a/simple-ota-server/firmware.bin b/simple-ota-server/firmware.bin Binary files differ. diff --git a/simple-ota-server/src/main.rs b/simple-ota-server/src/main.rs @@ -25,8 +25,6 @@ fn main() { _ = stream.write_all(chunk); _ = stream.read_exact(&mut buf); - - std::thread::sleep(std::time::Duration::from_millis(10)); } } }