A way to upload Host Firmware Notes to Notehub

Hi Blues team,

Is there a way to provide the Notes to host firmware on Notehub other than UI?

I was playing around with internal binary embedded metadata

Found this though:

But notes field doesn’t cut it. Notehub doesn’t recognize it.

Something like this:

// C Helpers to convert a number to a string
#define STRINGIFY(x) STRINGIFY_(x)
#define STRINGIFY_(x) #x

// Definitions used by firmware update
#define PRODUCT_ORG_NAME      "product org name"
#define PRODUCT_DISPLAY_NAME  "Notecard ESP32 DFU Example"
#define PRODUCT_FIRMWARE_ID   "notecard-esp32-dfu-example-v1"
#define PRODUCT_DESC          "product desc"
#define PRODUCT_MAJOR         1
#define PRODUCT_MINOR         0
#define PRODUCT_PATCH         0
#define PRODUCT_BUILD         0
#define PRODUCT_BUILT         __DATE__ " " __TIME__
#define PRODUCT_NOTES         "changelog entries"
#define PRODUCT_BUILDER       ""
#define PRODUCT_VERSION       STRINGIFY(PRODUCT_MAJOR) "." STRINGIFY(PRODUCT_MINOR) "." STRINGIFY(PRODUCT_PATCH)


// This is a product configuration JSON structure that enables the Notehub to recognize this
// firmware when it's uploaded, to help keep track of versions and so we only ever download
// firmware builds that are appropriate for this device.
#define QUOTE(x) "\"" x "\""
#define FIRMWARE_VERSION_HEADER "firmware::info:"
#define FIRMWARE_VERSION FIRMWARE_VERSION_HEADER         \
    "{" QUOTE("org") ":" QUOTE(PRODUCT_ORG_NAME)         \
    "," QUOTE("product") ":" QUOTE(PRODUCT_DISPLAY_NAME) \
    "," QUOTE("description") ":" QUOTE(PRODUCT_DESC)     \
    "," QUOTE("firmware") ":" QUOTE(PRODUCT_FIRMWARE_ID) \
    "," QUOTE("version") ":" QUOTE(PRODUCT_VERSION)      \
    "," QUOTE("built") ":" QUOTE(PRODUCT_BUILT)          \
    "," QUOTE("notes") ":" QUOTE(PRODUCT_NOTES)          \
    "," QUOTE("ver_major") ":" STRINGIFY(PRODUCT_MAJOR)  \
    "," QUOTE("ver_minor") ":" STRINGIFY(PRODUCT_MINOR)  \
    "," QUOTE("ver_patch") ":" STRINGIFY(PRODUCT_PATCH)  \
    "," QUOTE("ver_build") ":" STRINGIFY(PRODUCT_BUILD)  \
    "," QUOTE("builder") ":" QUOTE(PRODUCT_BUILDER)      \
    "}"

const char PRODUCT_METADATA[] __attribute__((section(".firmware_ver"))) = FIRMWARE_VERSION;


Got back JSON:

{
    "filename": "testingDFU-API-20260113205100",
    "version": "1.0.0.0",
    "md5": "a6a996889667cd545d55c239fe07d561",
    "organization": "product org name",
    "built": "Jan 13 2026 20:50:41",
    "product": "Notecard ESP32 DFU Example",
    "type": "host",
    "created": "1768337460",
    "published": true
}

Hey @Jakov,

The only way to set Notes on a firmware binary is indeed through the Notehub UI.

The reason you see a notes field included on a dfu.status request is because it’s showing a downloaded binary, and that binary had its notes set in Notehub.

Could you tell me more about what you’re trying to store in the notes field? Is using the description not sufficient? I can ask our cloud team to add the field, but just trying to get an idea of what you’re looking to do with it.

Thanks,

TJ

@tjvantoll

Well I was trying to automate firmware deployment but with added changelog entries attached for each host firmware.
Could we use the description for that? What are the limitations on that field? Could we insert a couple of lines of notes there.

But embedding changelog inside of binary itself seems like it goes against the fight to reduce the firmware binary size (to reduce bandwidth).

The best option here, would be to expand the Notehub API do include Notes payload for changelog. Obviously requiring changes from Blues team.

Thanks!

Hey @Jakov,

This makes sense. I agree that long-form metadata like this doesn’t belong in the binary, which is part of why notes aren’t included currently.

The best option here, would be to expand the Notehub API do include Notes payload for changelog.

I agree here. I’ll log this internally and get back with you.

TJ

1 Like