aboutsummaryrefslogtreecommitdiff
path: root/embassy-boot/src/boot_loader.rs
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/boot_loader.rs
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/boot_loader.rs')
-rw-r--r--embassy-boot/src/boot_loader.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/embassy-boot/src/boot_loader.rs b/embassy-boot/src/boot_loader.rs
index 61d61b96e..5bffdc5ea 100644
--- a/embassy-boot/src/boot_loader.rs
+++ b/embassy-boot/src/boot_loader.rs
@@ -5,7 +5,7 @@ use embassy_sync::blocking_mutex::raw::NoopRawMutex;
5use embassy_sync::blocking_mutex::Mutex; 5use embassy_sync::blocking_mutex::Mutex;
6use embedded_storage::nor_flash::{NorFlash, NorFlashError, NorFlashErrorKind}; 6use embedded_storage::nor_flash::{NorFlash, NorFlashError, NorFlashErrorKind};
7 7
8use crate::{State, BOOT_MAGIC, DFU_DETACH_MAGIC, STATE_ERASE_VALUE, SWAP_MAGIC}; 8use crate::{State, DFU_DETACH_MAGIC, REVERT_MAGIC, STATE_ERASE_VALUE, SWAP_MAGIC};
9 9
10/// Errors returned by bootloader 10/// Errors returned by bootloader
11#[derive(PartialEq, Eq, Debug)] 11#[derive(PartialEq, Eq, Debug)]
@@ -276,7 +276,7 @@ impl<ACTIVE: NorFlash, DFU: NorFlash, STATE: NorFlash> BootLoader<ACTIVE, DFU, S
276 self.state.erase(0, self.state.capacity() as u32)?; 276 self.state.erase(0, self.state.capacity() as u32)?;
277 277
278 // Set magic 278 // Set magic
279 state_word.fill(BOOT_MAGIC); 279 state_word.fill(REVERT_MAGIC);
280 self.state.write(0, state_word)?; 280 self.state.write(0, state_word)?;
281 } 281 }
282 } 282 }
@@ -411,6 +411,8 @@ impl<ACTIVE: NorFlash, DFU: NorFlash, STATE: NorFlash> BootLoader<ACTIVE, DFU, S
411 Ok(State::Swap) 411 Ok(State::Swap)
412 } else if !state_word.iter().any(|&b| b != DFU_DETACH_MAGIC) { 412 } else if !state_word.iter().any(|&b| b != DFU_DETACH_MAGIC) {
413 Ok(State::DfuDetach) 413 Ok(State::DfuDetach)
414 } else if !state_word.iter().any(|&b| b != REVERT_MAGIC) {
415 Ok(State::Revert)
414 } else { 416 } else {
415 Ok(State::Boot) 417 Ok(State::Boot)
416 } 418 }