From 40f5161c326166380b1af19170e7db15644b92b1 Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Mon, 1 Sep 2025 17:36:05 +0200 Subject: embassy-usb-dfu: fix: do not reset in GetStatus request Only reset the device after a USB reset request. This avoids error messages with update tools, which expect a response to a GetStatus request (like dfu-util). --- embassy-usb-dfu/CHANGELOG.md | 2 ++ embassy-usb-dfu/src/dfu.rs | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/embassy-usb-dfu/CHANGELOG.md b/embassy-usb-dfu/CHANGELOG.md index 466eff211..7e5adb1f2 100644 --- a/embassy-usb-dfu/CHANGELOG.md +++ b/embassy-usb-dfu/CHANGELOG.md @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased - ReleaseDate +- changed: Do not reset in the GetStatus request + ## 0.2.0 - 2025-08-27 - First release with changelog. diff --git a/embassy-usb-dfu/src/dfu.rs b/embassy-usb-dfu/src/dfu.rs index 9a2f125fb..3a390a37a 100644 --- a/embassy-usb-dfu/src/dfu.rs +++ b/embassy-usb-dfu/src/dfu.rs @@ -182,7 +182,7 @@ impl<'d, DFU: NorFlash, STATE: NorFlash, RST: Reset, const BLOCK_SIZE: usize> Ha Ok(Request::GetStatus) => { match self.state { State::DlSync => self.state = State::Download, - State::ManifestSync => self.reset.sys_reset(), + State::ManifestSync => self.state = State::ManifestWaitReset, _ => {} } @@ -201,6 +201,12 @@ impl<'d, DFU: NorFlash, STATE: NorFlash, RST: Reset, const BLOCK_SIZE: usize> Ha _ => None, } } + + fn reset(&mut self) { + if matches!(self.state, State::ManifestSync | State::ManifestWaitReset) { + self.reset.sys_reset() + } + } } /// An implementation of the USB DFU 1.1 protocol -- cgit