Skip to content

File syn_fwupdate.h

FileList > src > syntropic > system > syn_fwupdate.h

Go to the source code of this file

Streaming firmware updater — transport-agnostic, zero-alloc. More...

  • #include "../common/syn_defs.h"
  • #include "syn_fwimage.h"
  • #include <stdbool.h>
  • #include <stddef.h>
  • #include <stdint.h>

Classes

Type Name
struct SYN_FwUpdate
Firmware update context - manages streaming writes to flash.

Public Functions

Type Name
void syn_fwupdate_abort (SYN_FwUpdate * upd)
Abort the update.
SYN_Status syn_fwupdate_begin (SYN_FwUpdate * upd, uint32_t slot_addr, uint32_t max_size, uint8_t * page_buf, uint16_t page_buf_size)
Begin a firmware update.
SYN_Status syn_fwupdate_finish (SYN_FwUpdate * upd, uint32_t expected_crc, uint32_t version_code)
Finalize the update.
SYN_Status syn_fwupdate_write (SYN_FwUpdate * upd, const uint8_t * data, size_t len)
Write a chunk of firmware data.

Public Static Functions

Type Name
bool syn_fwupdate_active (const SYN_FwUpdate * upd)
Check if an update is in progress.
uint32_t syn_fwupdate_progress (const SYN_FwUpdate * upd)
Get bytes written so far.

Detailed Description

Receives firmware data in arbitrary-sized chunks, writes to flash, and computes a running CRC-32. On completion, verifies the CRC and writes the image header. On abort, marks the slot as invalid.

The caller provides a page-aligned write buffer (typically 256 bytes, matching flash write granularity). Data is buffered until a full page is ready, then flushed to flash.

** **

static uint8_t page_buf[256];
SYN_FwUpdate upd;

syn_fwupdate_begin(&upd, SLOT_B_ADDR, SLOT_B_SIZE,
                    page_buf, sizeof(page_buf));

// Feed chunks from HTTP, UART, BLE, etc.
while (have_data) {
    syn_fwupdate_write(&upd, chunk, chunk_len);
}

syn_fwupdate_finish(&upd, expected_crc, new_version);

Public Functions Documentation

function syn_fwupdate_abort

Abort the update.

void syn_fwupdate_abort (
    SYN_FwUpdate * upd
) 

Marks the slot as INVALID and cleans up.

Parameters:

  • upd Updater instance.

function syn_fwupdate_begin

Begin a firmware update.

SYN_Status syn_fwupdate_begin (
    SYN_FwUpdate * upd,
    uint32_t slot_addr,
    uint32_t max_size,
    uint8_t * page_buf,
    uint16_t page_buf_size
) 

Erases the first sector of the target slot and prepares for writing. The image header is written at slot_addr; image data starts at slot_addr + sizeof(SYN_FwImageHeader).

Parameters:

  • upd Updater instance.
  • slot_addr Flash base address of the target slot.
  • max_size Maximum image size in bytes (excl. header).
  • page_buf Caller-provided page buffer.
  • page_buf_size Buffer size (should match flash write granularity).

Returns:

SYN_OK on success, SYN_ERROR on flash erase failure.


function syn_fwupdate_finish

Finalize the update.

SYN_Status syn_fwupdate_finish (
    SYN_FwUpdate * upd,
    uint32_t expected_crc,
    uint32_t version_code
) 

Flushes any remaining buffered data, verifies the CRC-32 matches the expected value, and writes the image header with state = NEW.

Parameters:

  • upd Updater instance.
  • expected_crc Expected CRC-32 of the full image.
  • version_code Version code for the new image.

Returns:

SYN_OK if verification passes and header written, SYN_ERROR on mismatch or flash failure.


function syn_fwupdate_write

Write a chunk of firmware data.

SYN_Status syn_fwupdate_write (
    SYN_FwUpdate * upd,
    const uint8_t * data,
    size_t len
) 

Data is buffered until a full page is ready, then flushed to flash. Automatically erases sectors as needed.

Parameters:

  • upd Updater instance.
  • data Firmware data chunk.
  • len Chunk length.

Returns:

SYN_OK on success, SYN_ERROR on flash write failure or overflow.


Public Static Functions Documentation

function syn_fwupdate_active

Check if an update is in progress.

static inline bool syn_fwupdate_active (
    const SYN_FwUpdate * upd
) 

Parameters:

  • upd Updater instance.

Returns:

true if active.


function syn_fwupdate_progress

Get bytes written so far.

static inline uint32_t syn_fwupdate_progress (
    const SYN_FwUpdate * upd
) 

Parameters:

  • upd Updater instance.

Returns:

Bytes written.



The documentation for this class was generated from the following file src/syntropic/system/syn_fwupdate.h