aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-09-20 07:55:20 +0000
committerGitHub <[email protected]>2022-09-20 07:55:20 +0000
commit11da25800bce338e39082e9d35b1af8db3e5875d (patch)
treed6262cf0aa28b85d30459c4148273393aa66492a
parent66633902240a70eaf7b2bc6db285884ccdd8182f (diff)
parentd0fe654c82b548d65f49213ad50fc2edc5b3d71e (diff)
Merge #956
956: Remove BootFlash borrow r=lulf a=lulf Compiler will infer a different lifetime for BootFlash than for the borrowed flash, which makes it require more type annotations than if it was just owning the type. Since it doesn't really matter if it owns or borrows in practical use, change it to own so that it simplifies usage. Co-authored-by: Ulf Lilleengen <[email protected]>
-rw-r--r--embassy-boot/boot/src/lib.rs24
-rw-r--r--examples/boot/bootloader/nrf/src/main.rs2
-rw-r--r--examples/boot/bootloader/stm32/src/main.rs7
3 files changed, 16 insertions, 17 deletions
diff --git a/embassy-boot/boot/src/lib.rs b/embassy-boot/boot/src/lib.rs
index 4a2b112a9..015dd58db 100644
--- a/embassy-boot/boot/src/lib.rs
+++ b/embassy-boot/boot/src/lib.rs
@@ -447,24 +447,24 @@ where
447} 447}
448 448
449/// A flash wrapper implementing the Flash and embedded_storage traits. 449/// A flash wrapper implementing the Flash and embedded_storage traits.
450pub struct BootFlash<'a, F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8 = 0xFF> 450pub struct BootFlash<F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8 = 0xFF>
451where 451where
452 F: NorFlash + ReadNorFlash, 452 F: NorFlash + ReadNorFlash,
453{ 453{
454 flash: &'a mut F, 454 flash: F,
455} 455}
456 456
457impl<'a, F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> BootFlash<'a, F, BLOCK_SIZE, ERASE_VALUE> 457impl<F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> BootFlash<F, BLOCK_SIZE, ERASE_VALUE>
458where 458where
459 F: NorFlash + ReadNorFlash, 459 F: NorFlash + ReadNorFlash,
460{ 460{
461 /// Create a new instance of a bootable flash 461 /// Create a new instance of a bootable flash
462 pub fn new(flash: &'a mut F) -> Self { 462 pub fn new(flash: F) -> Self {
463 Self { flash } 463 Self { flash }
464 } 464 }
465} 465}
466 466
467impl<'a, F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> Flash for BootFlash<'a, F, BLOCK_SIZE, ERASE_VALUE> 467impl<F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> Flash for BootFlash<F, BLOCK_SIZE, ERASE_VALUE>
468where 468where
469 F: NorFlash + ReadNorFlash, 469 F: NorFlash + ReadNorFlash,
470{ 470{
@@ -472,14 +472,14 @@ where
472 const ERASE_VALUE: u8 = ERASE_VALUE; 472 const ERASE_VALUE: u8 = ERASE_VALUE;
473} 473}
474 474
475impl<'a, F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> ErrorType for BootFlash<'a, F, BLOCK_SIZE, ERASE_VALUE> 475impl<F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> ErrorType for BootFlash<F, BLOCK_SIZE, ERASE_VALUE>
476where 476where
477 F: ReadNorFlash + NorFlash, 477 F: ReadNorFlash + NorFlash,
478{ 478{
479 type Error = F::Error; 479 type Error = F::Error;
480} 480}
481 481
482impl<'a, F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> NorFlash for BootFlash<'a, F, BLOCK_SIZE, ERASE_VALUE> 482impl<F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> NorFlash for BootFlash<F, BLOCK_SIZE, ERASE_VALUE>
483where 483where
484 F: ReadNorFlash + NorFlash, 484 F: ReadNorFlash + NorFlash,
485{ 485{
@@ -487,26 +487,26 @@ where
487 const ERASE_SIZE: usize = F::ERASE_SIZE; 487 const ERASE_SIZE: usize = F::ERASE_SIZE;
488 488
489 fn erase(&mut self, from: u32, to: u32) -> Result<(), Self::Error> { 489 fn erase(&mut self, from: u32, to: u32) -> Result<(), Self::Error> {
490 F::erase(self.flash, from, to) 490 F::erase(&mut self.flash, from, to)
491 } 491 }
492 492
493 fn write(&mut self, offset: u32, bytes: &[u8]) -> Result<(), Self::Error> { 493 fn write(&mut self, offset: u32, bytes: &[u8]) -> Result<(), Self::Error> {
494 F::write(self.flash, offset, bytes) 494 F::write(&mut self.flash, offset, bytes)
495 } 495 }
496} 496}
497 497
498impl<'a, F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> ReadNorFlash for BootFlash<'a, F, BLOCK_SIZE, ERASE_VALUE> 498impl<F, const BLOCK_SIZE: usize, const ERASE_VALUE: u8> ReadNorFlash for BootFlash<F, BLOCK_SIZE, ERASE_VALUE>
499where 499where
500 F: ReadNorFlash + NorFlash, 500 F: ReadNorFlash + NorFlash,
501{ 501{
502 const READ_SIZE: usize = F::READ_SIZE; 502 const READ_SIZE: usize = F::READ_SIZE;
503 503
504 fn read(&mut self, offset: u32, bytes: &mut [u8]) -> Result<(), Self::Error> { 504 fn read(&mut self, offset: u32, bytes: &mut [u8]) -> Result<(), Self::Error> {
505 F::read(self.flash, offset, bytes) 505 F::read(&mut self.flash, offset, bytes)
506 } 506 }
507 507
508 fn capacity(&self) -> usize { 508 fn capacity(&self) -> usize {
509 F::capacity(self.flash) 509 F::capacity(&self.flash)
510 } 510 }
511} 511}
512 512
diff --git a/examples/boot/bootloader/nrf/src/main.rs b/examples/boot/bootloader/nrf/src/main.rs
index 9031997c2..8266206b3 100644
--- a/examples/boot/bootloader/nrf/src/main.rs
+++ b/examples/boot/bootloader/nrf/src/main.rs
@@ -21,7 +21,7 @@ fn main() -> ! {
21 21
22 let mut bl = BootLoader::default(); 22 let mut bl = BootLoader::default();
23 let start = bl.prepare(&mut SingleFlashConfig::new(&mut BootFlash::<_, 4096>::new( 23 let start = bl.prepare(&mut SingleFlashConfig::new(&mut BootFlash::<_, 4096>::new(
24 &mut WatchdogFlash::start(Nvmc::new(p.NVMC), p.WDT, 5), 24 WatchdogFlash::start(Nvmc::new(p.NVMC), p.WDT, 5),
25 ))); 25 )));
26 unsafe { bl.load(start) } 26 unsafe { bl.load(start) }
27} 27}
diff --git a/examples/boot/bootloader/stm32/src/main.rs b/examples/boot/bootloader/stm32/src/main.rs
index bb5d3e531..294464d1c 100644
--- a/examples/boot/bootloader/stm32/src/main.rs
+++ b/examples/boot/bootloader/stm32/src/main.rs
@@ -20,10 +20,9 @@ fn main() -> ! {
20 */ 20 */
21 21
22 let mut bl: BootLoader<ERASE_SIZE, WRITE_SIZE> = BootLoader::default(); 22 let mut bl: BootLoader<ERASE_SIZE, WRITE_SIZE> = BootLoader::default();
23 let mut flash = Flash::unlock(p.FLASH); 23 let flash = Flash::unlock(p.FLASH);
24 let start = bl.prepare(&mut SingleFlashConfig::new( 24 let mut flash = BootFlash::<_, ERASE_SIZE, ERASE_VALUE>::new(flash);
25 &mut BootFlash::<_, ERASE_SIZE, ERASE_VALUE>::new(&mut flash), 25 let start = bl.prepare(&mut SingleFlashConfig::new(&mut flash));
26 ));
27 core::mem::drop(flash); 26 core::mem::drop(flash);
28 unsafe { bl.load(start) } 27 unsafe { bl.load(start) }
29} 28}