embassy-boot

Crates

0.1.1

Versions

default

Flavors

Struct FirmwareUpdater

Source
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

Source

pub const fn new(dfu: Partition, state: Partition) -> Self

Create a firmware updater instance with partition ranges for the update and state partitions.

Source

pub fn firmware_len(&self) -> usize

Return the length of the DFU area

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Trait Implementations§

Source§

impl Default for FirmwareUpdater

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.