Struct embassy_boot::FirmwareUpdater
source · pub struct FirmwareUpdater<'d, DFU: NorFlash, STATE: NorFlash> { /* 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<'d, DFU: NorFlash, STATE: NorFlash> FirmwareUpdater<'d, DFU, STATE>
impl<'d, DFU: NorFlash, STATE: NorFlash> FirmwareUpdater<'d, DFU, STATE>
sourcepub fn new(
config: FirmwareUpdaterConfig<DFU, STATE>,
aligned: &'d mut [u8]
) -> Self
pub fn new( config: FirmwareUpdaterConfig<DFU, STATE>, aligned: &'d mut [u8] ) -> Self
Create a firmware updater instance with partition ranges for the update and state partitions.
sourcepub async fn get_state(&mut self) -> Result<State, FirmwareUpdaterError>
pub async fn get_state(&mut self) -> Result<State, FirmwareUpdaterError>
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 hash<D: Digest>(
&mut self,
update_len: u32,
chunk_buf: &mut [u8],
output: &mut [u8]
) -> Result<(), FirmwareUpdaterError>
pub async fn hash<D: Digest>( &mut self, update_len: u32, chunk_buf: &mut [u8], output: &mut [u8] ) -> Result<(), FirmwareUpdaterError>
Verify the update in DFU with any digest.
sourcepub async fn mark_updated(&mut self) -> Result<(), FirmwareUpdaterError>
pub async fn mark_updated(&mut self) -> Result<(), FirmwareUpdaterError>
Mark to trigger firmware swap on next boot.
sourcepub async fn mark_dfu(&mut self) -> Result<(), FirmwareUpdaterError>
pub async fn mark_dfu(&mut self) -> Result<(), FirmwareUpdaterError>
Mark to trigger USB DFU on next boot.
sourcepub async fn mark_booted(&mut self) -> Result<(), FirmwareUpdaterError>
pub async fn mark_booted(&mut self) -> Result<(), FirmwareUpdaterError>
Mark firmware boot successful and stop rollback on reset.
sourcepub async fn write_firmware(
&mut self,
offset: usize,
data: &[u8]
) -> Result<(), FirmwareUpdaterError>
pub async fn write_firmware( &mut self, offset: usize, data: &[u8] ) -> Result<(), FirmwareUpdaterError>
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(&mut self) -> Result<&mut DFU, FirmwareUpdaterError>
pub async fn prepare_update(&mut self) -> Result<&mut DFU, FirmwareUpdaterError>
Prepare for an incoming DFU update by erasing the entire DFU area and
returning its Partition
.
Using this instead of write_firmware
allows for an optimized API in
exchange for added complexity.