diff options
Diffstat (limited to 'embassy-boot/src/test_flash/blocking.rs')
| -rw-r--r-- | embassy-boot/src/test_flash/blocking.rs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/embassy-boot/src/test_flash/blocking.rs b/embassy-boot/src/test_flash/blocking.rs new file mode 100644 index 000000000..5ec476c65 --- /dev/null +++ b/embassy-boot/src/test_flash/blocking.rs | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | use core::cell::RefCell; | ||
| 2 | |||
| 3 | use embassy_embedded_hal::flash::partition::BlockingPartition; | ||
| 4 | use embassy_sync::blocking_mutex::raw::NoopRawMutex; | ||
| 5 | use embassy_sync::blocking_mutex::Mutex; | ||
| 6 | use embedded_storage::nor_flash::NorFlash; | ||
| 7 | |||
| 8 | use crate::BootLoaderConfig; | ||
| 9 | |||
| 10 | pub struct BlockingTestFlash<ACTIVE, DFU, STATE> | ||
| 11 | where | ||
| 12 | ACTIVE: NorFlash, | ||
| 13 | DFU: NorFlash, | ||
| 14 | STATE: NorFlash, | ||
| 15 | { | ||
| 16 | active: Mutex<NoopRawMutex, RefCell<ACTIVE>>, | ||
| 17 | dfu: Mutex<NoopRawMutex, RefCell<DFU>>, | ||
| 18 | state: Mutex<NoopRawMutex, RefCell<STATE>>, | ||
| 19 | } | ||
| 20 | |||
| 21 | impl<ACTIVE, DFU, STATE> BlockingTestFlash<ACTIVE, DFU, STATE> | ||
| 22 | where | ||
| 23 | ACTIVE: NorFlash, | ||
| 24 | DFU: NorFlash, | ||
| 25 | STATE: NorFlash, | ||
| 26 | { | ||
| 27 | pub fn new(config: BootLoaderConfig<ACTIVE, DFU, STATE>) -> Self { | ||
| 28 | Self { | ||
| 29 | active: Mutex::new(RefCell::new(config.active)), | ||
| 30 | dfu: Mutex::new(RefCell::new(config.dfu)), | ||
| 31 | state: Mutex::new(RefCell::new(config.state)), | ||
| 32 | } | ||
| 33 | } | ||
| 34 | |||
| 35 | pub fn active(&self) -> BlockingPartition<NoopRawMutex, ACTIVE> { | ||
| 36 | Self::create_partition(&self.active) | ||
| 37 | } | ||
| 38 | |||
| 39 | pub fn dfu(&self) -> BlockingPartition<NoopRawMutex, DFU> { | ||
| 40 | Self::create_partition(&self.dfu) | ||
| 41 | } | ||
| 42 | |||
| 43 | pub fn state(&self) -> BlockingPartition<NoopRawMutex, STATE> { | ||
| 44 | Self::create_partition(&self.state) | ||
| 45 | } | ||
| 46 | |||
| 47 | pub fn create_partition<T: NorFlash>( | ||
| 48 | mutex: &Mutex<NoopRawMutex, RefCell<T>>, | ||
| 49 | ) -> BlockingPartition<NoopRawMutex, T> { | ||
| 50 | BlockingPartition::new(mutex, 0, mutex.lock(|f| f.borrow().capacity()) as u32) | ||
| 51 | } | ||
| 52 | } | ||
| 53 | |||
| 54 | impl<ACTIVE, DFU, STATE> BlockingTestFlash<ACTIVE, DFU, STATE> | ||
| 55 | where | ||
| 56 | ACTIVE: NorFlash + embedded_storage_async::nor_flash::NorFlash, | ||
| 57 | DFU: NorFlash + embedded_storage_async::nor_flash::NorFlash, | ||
| 58 | STATE: NorFlash + embedded_storage_async::nor_flash::NorFlash, | ||
| 59 | { | ||
| 60 | pub fn into_async(self) -> super::AsyncTestFlash<ACTIVE, DFU, STATE> { | ||
| 61 | let config = BootLoaderConfig { | ||
| 62 | active: self.active.into_inner().into_inner(), | ||
| 63 | dfu: self.dfu.into_inner().into_inner(), | ||
| 64 | state: self.state.into_inner().into_inner(), | ||
| 65 | }; | ||
| 66 | super::AsyncTestFlash::new(config) | ||
| 67 | } | ||
| 68 | } | ||
