Skip to content

Support for MQTT Broker persist on STM32H5 demo#129

Open
dgarske wants to merge 3 commits into
wolfSSL:masterfrom
dgarske:mqtt_broker_persist
Open

Support for MQTT Broker persist on STM32H5 demo#129
dgarske wants to merge 3 commits into
wolfSSL:masterfrom
dgarske:mqtt_broker_persist

Conversation

@dgarske
Copy link
Copy Markdown
Member

@dgarske dgarske commented Jun 5, 2026

No description provided.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds an STM32H563-specific persistence backend for the wolfMQTT broker, storing broker state in a reserved internal-flash KV region and wiring it into the demo build and broker initialization flow.

Changes:

  • Enable broker persistence (and encrypted-at-rest mode) via user_settings.h, with reduced persisted-session and offline-queue limits sized for the flash KV region.
  • Reserve the top 32KB of internal flash in the STM32H563 linker script so firmware code cannot be placed in the persistence region.
  • Add and build a new STM32H5 internal-flash KV backend (mqtt_broker_persist_flash.c/.h) and install its hooks before MqttBroker_Start().

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/port/stm32h563/user_settings.h Enables broker persistence/encryption and sets persistence-related broker limits.
src/port/stm32h563/target.ld Shrinks the FLASH region to reserve 32KB for the persistence KV store.
src/port/stm32h563/mqtt_broker.c Initializes and installs persistence hooks before broker start.
src/port/stm32h563/mqtt_broker_persist_flash.h Declares the STM32H5 flash persistence init API and hook setup.
src/port/stm32h563/mqtt_broker_persist_flash.c Implements a log-structured KV store over reserved internal flash with optional encryption key hook.
src/port/stm32h563/Makefile Builds the new backend and links in the generic broker persistence codec.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/port/stm32h563/user_settings.h Outdated
Comment on lines +275 to +286
/* Persistence to STM32H5 internal flash, encrypted at rest (AES-256-GCM).
* Backend: mqtt_broker_persist_flash.c (this port). Generic codec:
* wolfmqtt/src/mqtt_broker_persist.c. Defined here (not via -D in the
* Makefile) so every wolfMQTT and port translation unit that pulls in
* user_settings.h sees the same configuration. */
#define WOLFMQTT_BROKER_PERSIST
#define WOLFMQTT_BROKER_PERSIST_ENCRYPT

/* Bound persisted-session / offline-queue counts to fit the 32KB flash
* KV region (upstream defaults of 64/32 are far larger than the store). */
#define BROKER_MAX_PERSIST_SESSIONS 8
#define BROKER_MAX_OFFLINE_MSGS_PER_SUB 8
Comment thread src/port/stm32h563/target.ld Outdated
Comment on lines +9 to +13
* The top 32KB of flash (4x 8KB sectors, 0x081F8000-0x08200000) are
* carved out of the code region and reserved for the MQTT broker
* persistence key/value store (see mqtt_broker_persist_flash.c, which
* hard-codes KVF_REGION_BASE/KVF_REGION_SIZE to match this length). The
* linker can never place code there, so an erase/program of the KV
Comment on lines +650 to +652
/* Scan a bank for the append offset (first erased slot). Returns the
* offset, or 0 to signal corruption (caller reformats). */
static uint32_t kvf_scan_append(uint32_t bank_base, int* corrupt)
Comment thread src/port/stm32h563/Makefile Outdated
Comment on lines 336 to 339
# MQTT broker wrapper + STM32H5 internal-flash persistence backend.
# Persistence (sessions/subs/retained/outq, AES-256-GCM encrypted at rest)
# is enabled via WOLFMQTT_BROKER_PERSIST{,_ENCRYPT} in user_settings.h.
SRCS += mqtt_broker.c
@dgarske dgarske force-pushed the mqtt_broker_persist branch from 19699e9 to d297f34 Compare June 5, 2026 22:52
@dgarske dgarske force-pushed the mqtt_broker_persist branch from b37393f to 820586b Compare June 5, 2026 23:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants