aboutsummaryrefslogtreecommitdiff
path: root/embassy-boot/src/firmware_updater
diff options
context:
space:
mode:
authorUlf Lilleengen <[email protected]>2024-09-18 16:14:53 +0200
committerUlf Lilleengen <[email protected]>2024-09-19 09:16:19 +0200
commitb1897c58fa617dbab02b39e7f5e399ed1c9d54b4 (patch)
tree3931ee8d87810f3baa6ec72913123f9e250e531b /embassy-boot/src/firmware_updater
parent45cbcb513dc0bbf3e12c102df0db8c15643cc78b (diff)
Add revert state in embassy-boot
The revert state signals that a firmware revert has taken place, allowing the application to know if a firmware update attempt was reverted.
Diffstat (limited to 'embassy-boot/src/firmware_updater')
-rw-r--r--embassy-boot/src/firmware_updater/asynch.rs3
-rw-r--r--embassy-boot/src/firmware_updater/blocking.rs3
2 files changed, 4 insertions, 2 deletions
diff --git a/embassy-boot/src/firmware_updater/asynch.rs b/embassy-boot/src/firmware_updater/asynch.rs
index 86b441592..b23857e2f 100644
--- a/embassy-boot/src/firmware_updater/asynch.rs
+++ b/embassy-boot/src/firmware_updater/asynch.rs
@@ -289,7 +289,8 @@ impl<'d, STATE: NorFlash> FirmwareState<'d, STATE> {
289 289
290 // Make sure we are running a booted firmware to avoid reverting to a bad state. 290 // Make sure we are running a booted firmware to avoid reverting to a bad state.
291 async fn verify_booted(&mut self) -> Result<(), FirmwareUpdaterError> { 291 async fn verify_booted(&mut self) -> Result<(), FirmwareUpdaterError> {
292 if self.get_state().await? == State::Boot { 292 let state = self.get_state().await?;
293 if state == State::Boot || state == State::DfuDetach || state == State::Revert {
293 Ok(()) 294 Ok(())
294 } else { 295 } else {
295 Err(FirmwareUpdaterError::BadState) 296 Err(FirmwareUpdaterError::BadState)
diff --git a/embassy-boot/src/firmware_updater/blocking.rs b/embassy-boot/src/firmware_updater/blocking.rs
index d3c723456..5f64b4be9 100644
--- a/embassy-boot/src/firmware_updater/blocking.rs
+++ b/embassy-boot/src/firmware_updater/blocking.rs
@@ -324,7 +324,8 @@ impl<'d, STATE: NorFlash> BlockingFirmwareState<'d, STATE> {
324 324
325 // Make sure we are running a booted firmware to avoid reverting to a bad state. 325 // Make sure we are running a booted firmware to avoid reverting to a bad state.
326 fn verify_booted(&mut self) -> Result<(), FirmwareUpdaterError> { 326 fn verify_booted(&mut self) -> Result<(), FirmwareUpdaterError> {
327 if self.get_state()? == State::Boot || self.get_state()? == State::DfuDetach { 327 let state = self.get_state()?;
328 if state == State::Boot || state == State::DfuDetach || state == State::Revert {
328 Ok(()) 329 Ok(())
329 } else { 330 } else {
330 Err(FirmwareUpdaterError::BadState) 331 Err(FirmwareUpdaterError::BadState)