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>
Writes firmware data to the device.
This function writes the given data to the firmware area starting at the specified offset. It handles sector erasures and data writes while verifying the device is in a proper state for firmware updates. The function ensures that only unerased sectors are erased before writing and efficiently handles the writing process across sector boundaries and in various configurations (data size, sector size, etc.).
§Arguments
offset
- The starting offset within the firmware area where data writing should begin.data
- A slice of bytes representing the firmware data to be written. It must be a multiple of NorFlash WRITE_SIZE.
§Returns
A Result<(), FirmwareUpdaterError>
indicating the success or failure of the write operation.
§Errors
This function will return an error if:
- The device is not in a proper state to receive firmware updates (e.g., not booted).
- There is a failure erasing a sector before writing.
- There is a failure writing data to the device.
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.