50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| mod asynch;
 | |
| mod blocking;
 | |
| 
 | |
| pub use asynch::{FirmwareState, FirmwareUpdater};
 | |
| pub use blocking::{BlockingFirmwareState, BlockingFirmwareUpdater};
 | |
| use embedded_storage::nor_flash::{NorFlashError, NorFlashErrorKind};
 | |
| 
 | |
| /// Firmware updater flash configuration holding the two flashes used by the updater
 | |
| ///
 | |
| /// If only a single flash is actually used, then that flash should be partitioned into two partitions before use.
 | |
| /// The easiest way to do this is to use [`FirmwareUpdaterConfig::from_linkerfile`] or [`FirmwareUpdaterConfig::from_linkerfile_blocking`] which will partition
 | |
| /// the provided flash according to symbols defined in the linkerfile.
 | |
| pub struct FirmwareUpdaterConfig<DFU, STATE> {
 | |
|     /// The dfu flash partition
 | |
|     pub dfu: DFU,
 | |
|     /// The state flash partition
 | |
|     pub state: STATE,
 | |
| }
 | |
| 
 | |
| /// Errors returned by FirmwareUpdater
 | |
| #[derive(Debug)]
 | |
| pub enum FirmwareUpdaterError {
 | |
|     /// Error from flash.
 | |
|     Flash(NorFlashErrorKind),
 | |
|     /// Signature errors.
 | |
|     Signature(signature::Error),
 | |
|     /// Bad state.
 | |
|     BadState,
 | |
| }
 | |
| 
 | |
| #[cfg(feature = "defmt")]
 | |
| impl defmt::Format for FirmwareUpdaterError {
 | |
|     fn format(&self, fmt: defmt::Formatter) {
 | |
|         match self {
 | |
|             FirmwareUpdaterError::Flash(_) => defmt::write!(fmt, "FirmwareUpdaterError::Flash(_)"),
 | |
|             FirmwareUpdaterError::Signature(_) => defmt::write!(fmt, "FirmwareUpdaterError::Signature(_)"),
 | |
|             FirmwareUpdaterError::BadState => defmt::write!(fmt, "FirmwareUpdaterError::BadState"),
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| impl<E> From<E> for FirmwareUpdaterError
 | |
| where
 | |
|     E: NorFlashError,
 | |
| {
 | |
|     fn from(error: E) -> Self {
 | |
|         FirmwareUpdaterError::Flash(error.kind())
 | |
|     }
 | |
| }
 |