aboutsummaryrefslogtreecommitdiff
path: root/embassy-boot/boot/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-boot/boot/src/lib.rs')
-rw-r--r--embassy-boot/boot/src/lib.rs79
1 files changed, 47 insertions, 32 deletions
diff --git a/embassy-boot/boot/src/lib.rs b/embassy-boot/boot/src/lib.rs
index 016362b86..47f7c1797 100644
--- a/embassy-boot/boot/src/lib.rs
+++ b/embassy-boot/boot/src/lib.rs
@@ -16,9 +16,11 @@ mod test_flash;
16// TODO: Use the value provided by NorFlash when available 16// TODO: Use the value provided by NorFlash when available
17pub(crate) const STATE_ERASE_VALUE: u8 = 0xFF; 17pub(crate) const STATE_ERASE_VALUE: u8 = 0xFF;
18pub use boot_loader::{BootError, BootLoader, BootLoaderConfig}; 18pub use boot_loader::{BootError, BootLoader, BootLoaderConfig};
19pub use firmware_updater::{
20 BlockingFirmwareState, BlockingFirmwareUpdater, FirmwareUpdaterConfig, FirmwareUpdaterError,
21};
19#[cfg(feature = "nightly")] 22#[cfg(feature = "nightly")]
20pub use firmware_updater::FirmwareUpdater; 23pub use firmware_updater::{FirmwareState, FirmwareUpdater};
21pub use firmware_updater::{BlockingFirmwareUpdater, FirmwareUpdaterConfig, FirmwareUpdaterError};
22 24
23pub(crate) const BOOT_MAGIC: u8 = 0xD0; 25pub(crate) const BOOT_MAGIC: u8 = 0xD0;
24pub(crate) const SWAP_MAGIC: u8 = 0xF0; 26pub(crate) const SWAP_MAGIC: u8 = 0xF0;
@@ -118,15 +120,18 @@ mod tests {
118 block_on(flash.active().erase(0, ORIGINAL.len() as u32)).unwrap(); 120 block_on(flash.active().erase(0, ORIGINAL.len() as u32)).unwrap();
119 block_on(flash.active().write(0, &ORIGINAL)).unwrap(); 121 block_on(flash.active().write(0, &ORIGINAL)).unwrap();
120 122
121 let mut updater = FirmwareUpdater::new(FirmwareUpdaterConfig { 123 let mut updater = FirmwareUpdater::new(
122 dfu: flash.dfu(), 124 FirmwareUpdaterConfig {
123 state: flash.state(), 125 dfu: flash.dfu(),
124 }); 126 state: flash.state(),
125 block_on(updater.write_firmware(&mut aligned, 0, &UPDATE)).unwrap(); 127 },
126 block_on(updater.mark_updated(&mut aligned)).unwrap(); 128 &mut aligned,
129 );
130 block_on(updater.write_firmware(0, &UPDATE)).unwrap();
131 block_on(updater.mark_updated()).unwrap();
127 132
128 // Writing after marking updated is not allowed until marked as booted. 133 // Writing after marking updated is not allowed until marked as booted.
129 let res: Result<(), FirmwareUpdaterError> = block_on(updater.write_firmware(&mut aligned, 0, &UPDATE)); 134 let res: Result<(), FirmwareUpdaterError> = block_on(updater.write_firmware(0, &UPDATE));
130 assert!(matches!(res, Err::<(), _>(FirmwareUpdaterError::BadState))); 135 assert!(matches!(res, Err::<(), _>(FirmwareUpdaterError::BadState)));
131 136
132 let flash = flash.into_blocking(); 137 let flash = flash.into_blocking();
@@ -158,11 +163,14 @@ mod tests {
158 163
159 // Mark as booted 164 // Mark as booted
160 let flash = flash.into_async(); 165 let flash = flash.into_async();
161 let mut updater = FirmwareUpdater::new(FirmwareUpdaterConfig { 166 let mut updater = FirmwareUpdater::new(
162 dfu: flash.dfu(), 167 FirmwareUpdaterConfig {
163 state: flash.state(), 168 dfu: flash.dfu(),
164 }); 169 state: flash.state(),
165 block_on(updater.mark_booted(&mut aligned)).unwrap(); 170 },
171 &mut aligned,
172 );
173 block_on(updater.mark_booted()).unwrap();
166 174
167 let flash = flash.into_blocking(); 175 let flash = flash.into_blocking();
168 let mut bootloader = BootLoader::new(BootLoaderConfig { 176 let mut bootloader = BootLoader::new(BootLoaderConfig {
@@ -190,12 +198,15 @@ mod tests {
190 block_on(flash.active().erase(0, ORIGINAL.len() as u32)).unwrap(); 198 block_on(flash.active().erase(0, ORIGINAL.len() as u32)).unwrap();
191 block_on(flash.active().write(0, &ORIGINAL)).unwrap(); 199 block_on(flash.active().write(0, &ORIGINAL)).unwrap();
192 200
193 let mut updater = FirmwareUpdater::new(FirmwareUpdaterConfig { 201 let mut updater = FirmwareUpdater::new(
194 dfu: flash.dfu(), 202 FirmwareUpdaterConfig {
195 state: flash.state(), 203 dfu: flash.dfu(),
196 }); 204 state: flash.state(),
197 block_on(updater.write_firmware(&mut aligned, 0, &UPDATE)).unwrap(); 205 },
198 block_on(updater.mark_updated(&mut aligned)).unwrap(); 206 &mut aligned,
207 );
208 block_on(updater.write_firmware(0, &UPDATE)).unwrap();
209 block_on(updater.mark_updated()).unwrap();
199 210
200 let flash = flash.into_blocking(); 211 let flash = flash.into_blocking();
201 let mut bootloader = BootLoader::new(BootLoaderConfig { 212 let mut bootloader = BootLoader::new(BootLoaderConfig {
@@ -232,12 +243,15 @@ mod tests {
232 block_on(flash.active().erase(0, ORIGINAL.len() as u32)).unwrap(); 243 block_on(flash.active().erase(0, ORIGINAL.len() as u32)).unwrap();
233 block_on(flash.active().write(0, &ORIGINAL)).unwrap(); 244 block_on(flash.active().write(0, &ORIGINAL)).unwrap();
234 245
235 let mut updater = FirmwareUpdater::new(FirmwareUpdaterConfig { 246 let mut updater = FirmwareUpdater::new(
236 dfu: flash.dfu(), 247 FirmwareUpdaterConfig {
237 state: flash.state(), 248 dfu: flash.dfu(),
238 }); 249 state: flash.state(),
239 block_on(updater.write_firmware(&mut aligned, 0, &UPDATE)).unwrap(); 250 },
240 block_on(updater.mark_updated(&mut aligned)).unwrap(); 251 &mut aligned,
252 );
253 block_on(updater.write_firmware(0, &UPDATE)).unwrap();
254 block_on(updater.mark_updated()).unwrap();
241 255
242 let flash = flash.into_blocking(); 256 let flash = flash.into_blocking();
243 let mut bootloader = BootLoader::new(BootLoaderConfig { 257 let mut bootloader = BootLoader::new(BootLoaderConfig {
@@ -293,18 +307,19 @@ mod tests {
293 307
294 // On with the test 308 // On with the test
295 let flash = flash.into_async(); 309 let flash = flash.into_async();
296 let mut updater = FirmwareUpdater::new(FirmwareUpdaterConfig {
297 dfu: flash.dfu(),
298 state: flash.state(),
299 });
300
301 let mut aligned = [0; 4]; 310 let mut aligned = [0; 4];
311 let mut updater = FirmwareUpdater::new(
312 FirmwareUpdaterConfig {
313 dfu: flash.dfu(),
314 state: flash.state(),
315 },
316 &mut aligned,
317 );
302 318
303 assert!(block_on(updater.verify_and_mark_updated( 319 assert!(block_on(updater.verify_and_mark_updated(
304 &public_key.to_bytes(), 320 &public_key.to_bytes(),
305 &signature.to_bytes(), 321 &signature.to_bytes(),
306 firmware_len as u32, 322 firmware_len as u32,
307 &mut aligned,
308 )) 323 ))
309 .is_ok()); 324 .is_ok());
310 } 325 }