Support for MQTT Broker persist on STM32H5 demo#129
Open
dgarske wants to merge 3 commits into
Open
Conversation
Contributor
There was a problem hiding this comment.
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 beforeMqttBroker_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 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 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 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 |
19699e9 to
d297f34
Compare
b37393f to
820586b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.