diff options
| author | sander <[email protected]> | 2023-04-11 13:48:34 +0200 |
|---|---|---|
| committer | sander <[email protected]> | 2023-04-11 13:48:34 +0200 |
| commit | c309797488a4f33dfab659fdb2908eff76e16e40 (patch) | |
| tree | 2ee72042d9f06bf694fea8dd4cd2ba3e2e2cb10b /embassy-boot/nrf/src | |
| parent | 6b2aaacf830d69fcb05f9611d3780f56b4ae82bc (diff) | |
| parent | b150b9506b2f0502065dc1b22eccc6448f611bff (diff) | |
merge embassy/master
Diffstat (limited to 'embassy-boot/nrf/src')
| -rw-r--r-- | embassy-boot/nrf/src/lib.rs | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/embassy-boot/nrf/src/lib.rs b/embassy-boot/nrf/src/lib.rs index 5cc6ba448..48bbd7e2a 100644 --- a/embassy-boot/nrf/src/lib.rs +++ b/embassy-boot/nrf/src/lib.rs | |||
| @@ -11,13 +11,12 @@ use embassy_nrf::wdt; | |||
| 11 | use embedded_storage::nor_flash::{ErrorType, NorFlash, ReadNorFlash}; | 11 | use embedded_storage::nor_flash::{ErrorType, NorFlash, ReadNorFlash}; |
| 12 | 12 | ||
| 13 | /// A bootloader for nRF devices. | 13 | /// A bootloader for nRF devices. |
| 14 | pub struct BootLoader { | 14 | pub struct BootLoader<const BUFFER_SIZE: usize = PAGE_SIZE> { |
| 15 | boot: embassy_boot::BootLoader, | 15 | boot: embassy_boot::BootLoader, |
| 16 | magic: AlignedBuffer<4>, | 16 | aligned_buf: AlignedBuffer<BUFFER_SIZE>, |
| 17 | page: AlignedBuffer<PAGE_SIZE>, | ||
| 18 | } | 17 | } |
| 19 | 18 | ||
| 20 | impl Default for BootLoader { | 19 | impl Default for BootLoader<PAGE_SIZE> { |
| 21 | /// Create a new bootloader instance using parameters from linker script | 20 | /// Create a new bootloader instance using parameters from linker script |
| 22 | fn default() -> Self { | 21 | fn default() -> Self { |
| 23 | extern "C" { | 22 | extern "C" { |
| @@ -31,20 +30,20 @@ impl Default for BootLoader { | |||
| 31 | 30 | ||
| 32 | let active = unsafe { | 31 | let active = unsafe { |
| 33 | Partition::new( | 32 | Partition::new( |
| 34 | &__bootloader_active_start as *const u32 as usize, | 33 | &__bootloader_active_start as *const u32 as u32, |
| 35 | &__bootloader_active_end as *const u32 as usize, | 34 | &__bootloader_active_end as *const u32 as u32, |
| 36 | ) | 35 | ) |
| 37 | }; | 36 | }; |
| 38 | let dfu = unsafe { | 37 | let dfu = unsafe { |
| 39 | Partition::new( | 38 | Partition::new( |
| 40 | &__bootloader_dfu_start as *const u32 as usize, | 39 | &__bootloader_dfu_start as *const u32 as u32, |
| 41 | &__bootloader_dfu_end as *const u32 as usize, | 40 | &__bootloader_dfu_end as *const u32 as u32, |
| 42 | ) | 41 | ) |
| 43 | }; | 42 | }; |
| 44 | let state = unsafe { | 43 | let state = unsafe { |
| 45 | Partition::new( | 44 | Partition::new( |
| 46 | &__bootloader_state_start as *const u32 as usize, | 45 | &__bootloader_state_start as *const u32 as u32, |
| 47 | &__bootloader_state_end as *const u32 as usize, | 46 | &__bootloader_state_end as *const u32 as u32, |
| 48 | ) | 47 | ) |
| 49 | }; | 48 | }; |
| 50 | 49 | ||
| @@ -56,20 +55,19 @@ impl Default for BootLoader { | |||
| 56 | } | 55 | } |
| 57 | } | 56 | } |
| 58 | 57 | ||
| 59 | impl BootLoader { | 58 | impl<const BUFFER_SIZE: usize> BootLoader<BUFFER_SIZE> { |
| 60 | /// Create a new bootloader instance using the supplied partitions for active, dfu and state. | 59 | /// Create a new bootloader instance using the supplied partitions for active, dfu and state. |
| 61 | pub fn new(active: Partition, dfu: Partition, state: Partition) -> Self { | 60 | pub fn new(active: Partition, dfu: Partition, state: Partition) -> Self { |
| 62 | Self { | 61 | Self { |
| 63 | boot: embassy_boot::BootLoader::new(active, dfu, state), | 62 | boot: embassy_boot::BootLoader::new(active, dfu, state), |
| 64 | magic: AlignedBuffer([0; 4]), | 63 | aligned_buf: AlignedBuffer([0; BUFFER_SIZE]), |
| 65 | page: AlignedBuffer([0; PAGE_SIZE]), | ||
| 66 | } | 64 | } |
| 67 | } | 65 | } |
| 68 | 66 | ||
| 69 | /// Inspect the bootloader state and perform actions required before booting, such as swapping | 67 | /// Inspect the bootloader state and perform actions required before booting, such as swapping |
| 70 | /// firmware. | 68 | /// firmware. |
| 71 | pub fn prepare<F: FlashConfig>(&mut self, flash: &mut F) -> usize { | 69 | pub fn prepare<F: FlashConfig>(&mut self, flash: &mut F) -> usize { |
| 72 | match self.boot.prepare_boot(flash, &mut self.magic.0, &mut self.page.0) { | 70 | match self.boot.prepare_boot(flash, &mut self.aligned_buf.0) { |
| 73 | Ok(_) => self.boot.boot_address(), | 71 | Ok(_) => self.boot.boot_address(), |
| 74 | Err(_) => panic!("boot prepare error!"), | 72 | Err(_) => panic!("boot prepare error!"), |
| 75 | } | 73 | } |
