pub struct FirmwareUpdater { /* private fields */ }
Expand description
FirmwareUpdater is an application API for interacting with the BootLoader without the ability to ‘mess up’ the internal bootloader state
Implementations§
Source§impl FirmwareUpdater
impl FirmwareUpdater
Sourcepub const fn new(dfu: Partition, state: Partition) -> Self
pub const fn new(dfu: Partition, state: Partition) -> Self
Create a firmware updater instance with partition ranges for the update and state partitions.
Sourcepub fn firmware_len(&self) -> usize
pub fn firmware_len(&self) -> usize
Return the length of the DFU area
Sourcepub async fn get_state<F: AsyncNorFlash>(
&mut self,
flash: &mut F,
aligned: &mut [u8],
) -> Result<State, F::Error>
pub async fn get_state<F: AsyncNorFlash>( &mut self, flash: &mut F, aligned: &mut [u8], ) -> Result<State, F::Error>
Obtain the current state.
This is useful to check if the bootloader has just done a swap, in order
to do verifications and self-tests of the new image before calling
mark_booted
.
Sourcepub async fn mark_updated<F: AsyncNorFlash>(
&mut self,
flash: &mut F,
aligned: &mut [u8],
) -> Result<(), F::Error>
pub async fn mark_updated<F: AsyncNorFlash>( &mut self, flash: &mut F, aligned: &mut [u8], ) -> Result<(), F::Error>
Mark to trigger firmware swap on next boot.
§Safety
The aligned
buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being written to.
Sourcepub async fn mark_booted<F: AsyncNorFlash>(
&mut self,
flash: &mut F,
aligned: &mut [u8],
) -> Result<(), F::Error>
pub async fn mark_booted<F: AsyncNorFlash>( &mut self, flash: &mut F, aligned: &mut [u8], ) -> Result<(), F::Error>
Mark firmware boot successful and stop rollback on reset.
§Safety
The aligned
buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being written to.
Sourcepub async fn write_firmware<F: AsyncNorFlash>(
&mut self,
offset: usize,
data: &[u8],
flash: &mut F,
block_size: usize,
) -> Result<(), F::Error>
pub async fn write_firmware<F: AsyncNorFlash>( &mut self, offset: usize, data: &[u8], flash: &mut F, block_size: usize, ) -> Result<(), F::Error>
Write data to a flash page.
The buffer must follow alignment requirements of the target flash and a multiple of page size big.
§Safety
Failing to meet alignment and size requirements may result in a panic.
Sourcepub async fn prepare_update<F: AsyncNorFlash>(
&mut self,
flash: &mut F,
) -> Result<FirmwareWriter, F::Error>
pub async fn prepare_update<F: AsyncNorFlash>( &mut self, flash: &mut F, ) -> Result<FirmwareWriter, F::Error>
Prepare for an incoming DFU update by erasing the entire DFU area and
returning a FirmwareWriter
.
Using this instead of write_firmware
allows for an optimized API in
exchange for added complexity.
Sourcepub fn get_state_blocking<F: NorFlash>(
&mut self,
flash: &mut F,
aligned: &mut [u8],
) -> Result<State, F::Error>
pub fn get_state_blocking<F: NorFlash>( &mut self, flash: &mut F, aligned: &mut [u8], ) -> Result<State, F::Error>
Obtain the current state.
This is useful to check if the bootloader has just done a swap, in order
to do verifications and self-tests of the new image before calling
mark_booted
.
Sourcepub fn mark_updated_blocking<F: NorFlash>(
&mut self,
flash: &mut F,
aligned: &mut [u8],
) -> Result<(), F::Error>
pub fn mark_updated_blocking<F: NorFlash>( &mut self, flash: &mut F, aligned: &mut [u8], ) -> Result<(), F::Error>
Mark to trigger firmware swap on next boot.
§Safety
The aligned
buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being written to.
Sourcepub fn mark_booted_blocking<F: NorFlash>(
&mut self,
flash: &mut F,
aligned: &mut [u8],
) -> Result<(), F::Error>
pub fn mark_booted_blocking<F: NorFlash>( &mut self, flash: &mut F, aligned: &mut [u8], ) -> Result<(), F::Error>
Mark firmware boot successful and stop rollback on reset.
§Safety
The aligned
buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being written to.
Sourcepub fn write_firmware_blocking<F: NorFlash>(
&mut self,
offset: usize,
data: &[u8],
flash: &mut F,
block_size: usize,
) -> Result<(), F::Error>
pub fn write_firmware_blocking<F: NorFlash>( &mut self, offset: usize, data: &[u8], flash: &mut F, block_size: usize, ) -> Result<(), F::Error>
Write data to a flash page.
The buffer must follow alignment requirements of the target flash and a multiple of page size big.
§Safety
Failing to meet alignment and size requirements may result in a panic.
Sourcepub fn prepare_update_blocking<F: NorFlash>(
&mut self,
flash: &mut F,
) -> Result<FirmwareWriter, F::Error>
pub fn prepare_update_blocking<F: NorFlash>( &mut self, flash: &mut F, ) -> Result<FirmwareWriter, F::Error>
Prepare for an incoming DFU update by erasing the entire DFU area and
returning a FirmwareWriter
.
Using this instead of write_firmware_blocking
allows for an optimized
API in exchange for added complexity.